@kern0x1b/penstock-cli 26.11.0 → 26.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/THIRD-PARTY-NOTICES.md +16 -16
  2. package/dist/chunk-account-BaYNvO18.js +1 -0
  3. package/dist/{chunk-agentLaunch-D21uPuMr.js → chunk-agentLaunch-BnrpVME4.js} +1 -1
  4. package/dist/chunk-agentServe-BeOh1rjE.js +10 -0
  5. package/dist/chunk-agents-CZJoU2u2.js +1 -0
  6. package/dist/chunk-agentsMigrate-DnrqoXNz.js +2 -0
  7. package/dist/{chunk-analyze-BG-rlggA.js → chunk-analyze-ClE2LBCj.js} +1 -1
  8. package/dist/chunk-analyze-DgQqzEgb.js +1 -0
  9. package/dist/{chunk-analyzeFlow-2cYPgjh-.js → chunk-analyzeFlow-F2ZFmJhv.js} +1 -1
  10. package/dist/chunk-apiTemplates-Cl_z63FA.js +1 -0
  11. package/dist/{chunk-bot-DlhStBoG.js → chunk-bot-C2k8yaXA.js} +5 -5
  12. package/dist/chunk-cmmnFindings-DKpYqUZN.js +1 -0
  13. package/dist/{chunk-codeFactSet-LxSnQy8K.js → chunk-codeFactSet-DiAYqvbb.js} +1 -1
  14. package/dist/{chunk-codeIndex-N1gnP_sW.js → chunk-codeIndex-vStNh6Bm.js} +1 -1
  15. package/dist/chunk-codeLinks-BVpn4_Sr.js +1 -0
  16. package/dist/chunk-codeLinks-BrGduhsm.js +1 -0
  17. package/dist/chunk-command-8s6m3ZUw.js +5 -0
  18. package/dist/chunk-command-aMxPQdiV.js +1 -0
  19. package/dist/chunk-command-vH1_y5F0.js +1 -0
  20. package/dist/chunk-commands-B8YVT41b.js +5 -0
  21. package/dist/{chunk-commands-DcjlDt7B.js → chunk-commands-CJCSznbv.js} +1 -1
  22. package/dist/chunk-compose-BUJTvoFX.js +4 -0
  23. package/dist/chunk-connections-Drr67X9U.js +1 -0
  24. package/dist/chunk-connectors-DcMqy0u8.js +1 -0
  25. package/dist/chunk-convert-Ce1MZmsE.js +3 -0
  26. package/dist/chunk-convert-FkMnlxyi.js +1 -0
  27. package/dist/chunk-deploy-BHg8pB9x.js +1 -0
  28. package/dist/chunk-deploy-DZgCTgaY.js +6 -0
  29. package/dist/{chunk-diagrams-BukAOL0g.js → chunk-diagrams-CtGMGTa8.js} +1 -1
  30. package/dist/chunk-diff-9hjavV6V.js +1 -0
  31. package/dist/chunk-diff-Dp3fUALc.js +1 -0
  32. package/dist/chunk-dispatch-o-eqJb9Y.js +7 -0
  33. package/dist/chunk-dmnTests-BOxutoRs.js +1 -0
  34. package/dist/{chunk-dmnTests-ChwX1YVo.js → chunk-dmnTests-BzNA-u2k.js} +1 -1
  35. package/dist/{chunk-docs-D7yEDpa4.js → chunk-docs-B3C3pZpY.js} +17 -17
  36. package/dist/chunk-doctor-CRxbsAm7.js +1 -0
  37. package/dist/{chunk-editPreview-CC2vwhIW.js → chunk-editPreview-DCUnMkTU.js} +1 -1
  38. package/dist/chunk-evidence-ny_2ltVe.js +23 -0
  39. package/dist/{chunk-examples-0HkF-frb.js → chunk-examples-BG0lGXcZ.js} +9 -9
  40. package/dist/chunk-export-Blwjf23H.js +1 -0
  41. package/dist/chunk-export-kt3sBTZu.js +20 -0
  42. package/dist/{chunk-facts-DSVaURw5.js → chunk-facts-Dl5lLriU.js} +1 -1
  43. package/dist/chunk-failure-BRyRvObj.js +1 -0
  44. package/dist/{chunk-file-BswMa3FN.js → chunk-file-1YhfNmPn.js} +1 -1
  45. package/dist/chunk-import-Dh3az4BC.js +6 -0
  46. package/dist/chunk-importCommand-Dhikkmo0.js +1 -0
  47. package/dist/chunk-incident-LJe2-ohi.js +1 -0
  48. package/dist/chunk-init-D34Q4YA8.js +227 -0
  49. package/dist/chunk-lint-CnEhoYRB.js +1 -0
  50. package/dist/{chunk-lsp-7vA_mIt1.js → chunk-lsp-BzeJkpmf.js} +1 -1
  51. package/dist/chunk-main-BZF-ErAx.js +1 -0
  52. package/dist/chunk-mcp-B_B9bet5.js +95 -0
  53. package/dist/{chunk-mcpLaunch-LyfmIF_Z.js → chunk-mcpLaunch-BS709697.js} +1 -1
  54. package/dist/chunk-migrate-DVfXC-iJ.js +1 -0
  55. package/dist/chunk-migrate-DwWg0k5_.js +16 -0
  56. package/dist/{chunk-migrateApply-CzOkgKhB.js → chunk-migrateApply-e8O9oZXP.js} +3 -3
  57. package/dist/chunk-migrateVerify-oIBf-PM3.js +1 -0
  58. package/dist/{chunk-model-f8AzYUK7.js → chunk-model-BulEKnY1.js} +2 -2
  59. package/dist/{chunk-parse-B-uKGDy-.js → chunk-parse-DiOcpdOU.js} +1 -1
  60. package/dist/{chunk-penstockCli-CKMvaZ0O.js → chunk-penstockCli-C41P_G7i.js} +1 -1
  61. package/dist/chunk-policy-BVb7c7G_.js +1 -0
  62. package/dist/chunk-policyGate-BOgKsqLq.js +2 -0
  63. package/dist/chunk-pr-1jKcTNnP.js +1 -0
  64. package/dist/{chunk-project-DBYOlYRi.js → chunk-project-COaBZhMt.js} +1 -1
  65. package/dist/chunk-project-lO_6DX8G.js +1 -0
  66. package/dist/chunk-promotion-CTMPjXjZ.js +2 -0
  67. package/dist/chunk-promotion-DDLrgBqZ.js +1 -0
  68. package/dist/{chunk-promotion-DchO6xoC.js → chunk-promotion-NeRj4uTP.js} +1 -1
  69. package/dist/chunk-receipt-C4NqnSkH.js +1 -0
  70. package/dist/chunk-receiptDeps-B7MehyHT.js +1 -0
  71. package/dist/chunk-receiptGate-BZCKCMTV.js +1 -0
  72. package/dist/chunk-receiptGate-DRcw327y.js +1 -0
  73. package/dist/{chunk-receiptSnapshot-B6ruXw8z.js → chunk-receiptSnapshot-CHSk3_4N.js} +1 -1
  74. package/dist/{chunk-receiptStore-Cy-L0H1u.js → chunk-receiptStore-DhROtI2h.js} +1 -1
  75. package/dist/chunk-refactor-CO3qyIEv.js +17 -0
  76. package/dist/chunk-refactor-CWeCOl7w.js +1 -0
  77. package/dist/{chunk-render-Ci5d6mg4.js → chunk-render-DZd5hScS.js} +1 -1
  78. package/dist/chunk-report-w7YZwhyg.js +1 -0
  79. package/dist/chunk-review-DYMgFDSy.js +1 -0
  80. package/dist/chunk-say-CP1IyOSv.js +1 -0
  81. package/dist/{chunk-security-VgKwtohm.js → chunk-security-pgip-kdY.js} +2 -2
  82. package/dist/chunk-serve-CKt2rO05.js +10 -0
  83. package/dist/{chunk-share-CBV2FuKq.js → chunk-share-rsL0itIM.js} +18 -18
  84. package/dist/chunk-stages-B2sBBxUc.js +3 -0
  85. package/dist/chunk-systemError-O3vQ8hLb.js +1 -0
  86. package/dist/chunk-systemError-n2E6isvg.js +1 -0
  87. package/dist/chunk-taskTest-DWoME1mY.js +2 -0
  88. package/dist/chunk-taskTest-JErgWO6t.js +1 -0
  89. package/dist/{chunk-templateDiagnostics-BwH7RNkz.js → chunk-templateDiagnostics-6txfKwas.js} +2 -2
  90. package/dist/chunk-templates-Y3xfCO_3.js +1 -0
  91. package/dist/chunk-testCases-BwimUfDC.js +4 -0
  92. package/dist/chunk-testCases-DO2Rkyvd.js +1 -0
  93. package/dist/chunk-tests-Cy325OGw.js +1 -0
  94. package/dist/chunk-tests-DNkORsqB.js +23 -0
  95. package/dist/{chunk-trust-DXcsUJaK.js → chunk-trust-DSX-k3by.js} +1 -1
  96. package/dist/{chunk-trust-DubjEjlN.js → chunk-trust-Di4EYPah.js} +1 -1
  97. package/dist/{chunk-variableChecks-KnECGMR3.js → chunk-variableChecks-CBDpmI4d.js} +1 -1
  98. package/dist/{chunk-workerVariables-CajAcbwl.js → chunk-workerVariables-CNnCRijJ.js} +1 -1
  99. package/dist/{chunk-workerVariables-DIDoUpHF.js → chunk-workerVariables-CulLc3YH.js} +1 -1
  100. package/dist/chunk-wrapper-CGYED7G2.js +1 -0
  101. package/dist/chunk-wrapper-CK7Xtes6.js +3 -0
  102. package/dist/grammars/web-tree-sitter.wasm +0 -0
  103. package/dist/penstock.js +1 -1
  104. package/dist/web/assets/{AgentSettings-Cn5Vcph3.js → AgentSettings-D24jOuht.js} +1 -1
  105. package/dist/web/assets/{AgentsDialog-C6WqzlxZ.js → AgentsDialog-BMWv3Gyk.js} +1 -1
  106. package/dist/web/assets/{AgentsDialog-dpbwVSxk.js → AgentsDialog-DbY2O6O5.js} +1 -1
  107. package/dist/web/assets/{AgentsTab-C34OhVkw.js → AgentsTab-D6LbK6sG.js} +2 -2
  108. package/dist/web/assets/{BpmnCanvas-yur9daZa.js → BpmnCanvas-BcQRQ2Br.js} +27 -27
  109. package/dist/web/assets/BpmnDocument-Ce5F4K1e.js +27 -0
  110. package/dist/web/assets/CmmnDocument-C_UlPowC.js +17 -0
  111. package/dist/web/assets/{ConflictDialog-Bb5kduaR.js → ConflictDialog-DfFp8F7n.js} +1 -1
  112. package/dist/web/assets/{ConnectionsDialog-qtF7yDFw.js → ConnectionsDialog-BaYtHD5h.js} +1 -1
  113. package/dist/web/assets/{DiffDocument-LHOif5Ac.js → DiffDocument-BOPdBEN3.js} +1 -1
  114. package/dist/web/assets/{DmnDocument-0f5uS67x.css → DmnDocument-DZ9u2uk2.css} +1 -1
  115. package/dist/web/assets/DmnDocument-vtnARy7Q.js +41 -0
  116. package/dist/web/assets/{DriftDialog-Chl6BX6k.js → DriftDialog-dIbCbSK2.js} +1 -1
  117. package/dist/web/assets/FormDocument-B0q8DF9v.css +1 -0
  118. package/dist/web/assets/FormDocument-DHBUBUzO.js +32 -0
  119. package/dist/web/assets/FormStepView-CbHb32_8.js +1 -0
  120. package/dist/web/assets/{GraphAwareLayoutService-wsos3yPD.js → GraphAwareLayoutService-C5N8K9dm.js} +1 -1
  121. package/dist/web/assets/{MigrationDialog-CBJU7Oe3.js → MigrationDialog-DA3Vrzgw.js} +1 -1
  122. package/dist/web/assets/{NewFileDialog-B7075LWG.js → NewFileDialog-Dev41oA1.js} +1 -1
  123. package/dist/web/assets/PolicyDialog-qR19Csji.js +1 -0
  124. package/dist/web/assets/{QuickOpen-DJQrI7Od.js → QuickOpen-ps-rMjiS.js} +1 -1
  125. package/dist/web/assets/ScriptPane-BQLMNYzc.js +2 -0
  126. package/dist/web/assets/{ScriptRunDialog-BwE4cXnp.js → ScriptRunDialog-YivjHB6j.js} +1 -1
  127. package/dist/web/assets/{SettingsDialog-c307wPsg.js → SettingsDialog-DI0vZ6Ay.js} +1 -1
  128. package/dist/web/assets/ShortcutsDialog-DLXnv4Vm.js +1 -0
  129. package/dist/web/assets/SourceDocument-Cj8cGsoS.js +1 -0
  130. package/dist/web/assets/TemplateDocument-BRyFsofH.js +7 -0
  131. package/dist/web/assets/TextDocument-DB2hEuMA.js +1 -0
  132. package/dist/web/assets/{UnreadableFileLayer-CUP_30X8.js → UnreadableFileLayer-CRW3MM7w.js} +1 -1
  133. package/dist/web/assets/{UploadDialog-CaVBOxUL.js → UploadDialog-D-X6GG98.js} +1 -1
  134. package/dist/web/assets/Viewer-BcpDlvg_.js +4 -0
  135. package/dist/web/assets/apply-Nsj6ek02.js +1 -0
  136. package/dist/web/assets/{bpmnTheme-CZ7xp4R5.js → bpmnTheme-pKgl9Mrn.js} +2 -2
  137. package/dist/web/assets/{data-ZauKnQ2Z.js → data-CdiToGOq.js} +2 -2
  138. package/dist/web/assets/{data-Da5Nxzev.js → data-wU6sw6RY.js} +1 -1
  139. package/dist/web/assets/{dialog-DSLu1Bbo.js → dialog-BDJ5dDiU.js} +1 -1
  140. package/dist/web/assets/{diff-C4hitkRR.js → diff-BhYqTg4l.js} +1 -1
  141. package/dist/web/assets/dist-27z6Phtg.js +23 -0
  142. package/dist/web/assets/{dist-CofBTWz1.js → dist-B7TL-7R3.js} +4 -4
  143. package/dist/web/assets/dist-BEpeEbIu.js +1 -0
  144. package/dist/web/assets/{dist-CYCbBoYQ.js → dist-BTf7NfeQ.js} +1 -1
  145. package/dist/web/assets/{dist-CJKVV2_S.js → dist-BqGv7f4M.js} +10 -10
  146. package/dist/web/assets/dist-C-q1IWjr.js +6 -0
  147. package/dist/web/assets/{dist-Blylfrak.js → dist-CJx_2eBF.js} +2 -2
  148. package/dist/web/assets/dist-COUY_jv5.js +1 -0
  149. package/dist/web/assets/{dist-DpDu6Wz_.js → dist-CWjAtsKe.js} +1 -1
  150. package/dist/web/assets/{dist-gb3IfUZi.js → dist-Cv8_A_95.js} +2 -2
  151. package/dist/web/assets/dist-DDE6BjgI.js +5 -0
  152. package/dist/web/assets/{dist-7VC_hKpw.js → dist-DDNYYQtV.js} +1 -1
  153. package/dist/web/assets/dist-DW-S9iZN.js +1 -0
  154. package/dist/web/assets/dist-OnU5n5o1.js +1 -0
  155. package/dist/web/assets/dmn-Cgoh6wXm.js +3 -0
  156. package/dist/web/assets/{documentBridge-1Eg7H9yI.js → documentBridge-CHw4XsZH.js} +3 -3
  157. package/dist/web/assets/{documents-LG-7CTrn.js → documents-CEtohzAC.js} +1 -1
  158. package/dist/web/assets/duplicate-D_ic-m62.js +342 -0
  159. package/dist/web/assets/{engines-DhO6OW1S.js → engines-lyEvb0pH.js} +1 -1
  160. package/dist/web/assets/{executable-BTarDLry.js → executable--4381_Lf.js} +1 -1
  161. package/dist/web/assets/{file-CIeVSOHy.js → file-BbVBUuIH.js} +1 -1
  162. package/dist/web/assets/formChecks-CSClH9sH.js +1 -0
  163. package/dist/web/assets/frontend-uXAWaalt.js +1 -0
  164. package/dist/web/assets/{httpHost-DBSjdVth.js → httpHost-C973OTRe.js} +1 -1
  165. package/dist/web/assets/{index.es-pigASDxC.js → index.es-CMvq8Bhe.js} +3 -3
  166. package/dist/web/assets/index.es-GbdJvMnO.js +78 -0
  167. package/dist/web/assets/{index.esm-CTLpq4ik.js → index.esm-Ba6q0zSu.js} +1 -1
  168. package/dist/web/assets/{intelligence-_1C71hkQ.js → intelligence-DNqJNmdB.js} +3 -3
  169. package/dist/web/assets/{jspdf.es.min-PgZzOmkT.js → jspdf.es.min-C0L4zezU.js} +6 -6
  170. package/dist/web/assets/{kind-X3_nabTt.js → kind-DDHnk6dW.js} +1 -1
  171. package/dist/web/assets/{lib-BmLAen_d.js → lib-DrkEMJ65.js} +1 -1
  172. package/dist/web/assets/{list-DovB9lWV.js → list-TmXvCwja.js} +1 -1
  173. package/dist/web/assets/{migrationHost-BcguK4K5.js → migrationHost-DCWBb3L6.js} +1 -1
  174. package/dist/web/assets/moddle-f0Q4Guwd.js +1 -0
  175. package/dist/web/assets/{model--Bj28IOj.js → model-afHgSxJs.js} +1 -1
  176. package/dist/web/assets/{nudges-UF9_cBuO.js → nudges-DPG3WpyV.js} +1 -1
  177. package/dist/web/assets/{open-C9Kt9JLw.js → open-Vkx72dYx.js} +1 -1
  178. package/dist/web/assets/platform-G53Cenyw.js +2 -0
  179. package/dist/web/assets/{preload-helper-VRuDKI9K.js → preload-helper-DExCAR_V.js} +1 -1
  180. package/dist/web/assets/{run-BZgz1U9U.js → run-BMfRBe5O.js} +1 -1
  181. package/dist/web/assets/samples-BL3jA_Vd.js +1 -0
  182. package/dist/web/assets/{say-WvEHqIbO.js → say-BkdZMivA.js} +1 -1
  183. package/dist/web/assets/{say-ChFGKK2E.js → say-C7KqKcFr.js} +1 -1
  184. package/dist/web/assets/{sections-N6WYk7b8.js → sections-LJKSRDTS.js} +1 -1
  185. package/dist/web/assets/sharedReader-BsXfiBT8.js +1 -0
  186. package/dist/web/assets/{source-frame-DcptKpVq.js → source-frame-DC4W0A5-.js} +2 -2
  187. package/dist/web/assets/{syntax-DW10Wzg4.js → syntax-00Hk6Xv7.js} +4 -4
  188. package/dist/web/assets/{template-CMl68jPp.js → template-BQP7ZXdK.js} +1 -1
  189. package/dist/web/assets/testCaseRuns-liAhWMg7.js +1 -0
  190. package/dist/web/assets/{trace-DLziNpe2.js → trace-DXQU2N_l.js} +1 -1
  191. package/dist/web/assets/{translator-DLDFsUlE.js → translator-BLCeE6UY.js} +1 -1
  192. package/dist/web/assets/ui-BLtm3Y1J.js +1 -0
  193. package/dist/web/assets/{useTrace-UYBskc2k.js → useTrace-dZdQ805W.js} +1 -1
  194. package/dist/web/assets/web-C4k0NLZ9.js +982 -0
  195. package/dist/web/assets/web-CnDpD6qy.css +1 -0
  196. package/dist/web/assets/{workerVariables-DURgyUbG.js → workerVariables-O6VqwDzr.js} +1 -1
  197. package/dist/web/assets/xml-DIWt4von.js +1 -0
  198. package/dist/web/index.html +39 -40
  199. package/package.json +5 -5
  200. package/dist/chunk-account-CpZu-RTg.js +0 -1
  201. package/dist/chunk-agentServe-BYRtgGGD.js +0 -10
  202. package/dist/chunk-agents-B9oxdPTA.js +0 -1
  203. package/dist/chunk-agentsMigrate-BV8TeRXq.js +0 -2
  204. package/dist/chunk-analyze-pgzR-Cx-.js +0 -1
  205. package/dist/chunk-apiTemplates-cU7C8vap.js +0 -1
  206. package/dist/chunk-cmmnFindings-S2TGSnEp.js +0 -1
  207. package/dist/chunk-codeLinks-C8N6e8k3.js +0 -1
  208. package/dist/chunk-codeLinks-o0a8tBGk.js +0 -1
  209. package/dist/chunk-command-Bqlbgo-2.js +0 -1
  210. package/dist/chunk-command-DT84ioJb.js +0 -5
  211. package/dist/chunk-command-DrGP2kg8.js +0 -1
  212. package/dist/chunk-commands-B4PoZbpX.js +0 -5
  213. package/dist/chunk-compose-CWKKVtN5.js +0 -4
  214. package/dist/chunk-connections-DQpKbIGD.js +0 -1
  215. package/dist/chunk-connectors-PtAvE91B.js +0 -1
  216. package/dist/chunk-convert-CpgtOlZk.js +0 -1
  217. package/dist/chunk-convert-HbFpg8ab.js +0 -3
  218. package/dist/chunk-deploy-l4MdFfn8.js +0 -6
  219. package/dist/chunk-deploy-qRaaKGZb.js +0 -1
  220. package/dist/chunk-diff-BhTFlCE3.js +0 -1
  221. package/dist/chunk-diff-kBF83vzM.js +0 -1
  222. package/dist/chunk-dispatch-BnO-QhMh.js +0 -7
  223. package/dist/chunk-dmnTests-0x_yUH6S.js +0 -1
  224. package/dist/chunk-doctor-BuHK1dTm.js +0 -1
  225. package/dist/chunk-evidence-oLw_C6j8.js +0 -23
  226. package/dist/chunk-export-cIFHDXug.js +0 -1
  227. package/dist/chunk-export-jBVxtmCH.js +0 -20
  228. package/dist/chunk-failure-D5brrYW2.js +0 -1
  229. package/dist/chunk-import-BBOe-5RZ.js +0 -6
  230. package/dist/chunk-importCommand-DRjYoljA.js +0 -1
  231. package/dist/chunk-incident-BK1h37CD.js +0 -1
  232. package/dist/chunk-init-_OALJuKm.js +0 -227
  233. package/dist/chunk-lint-7KJFxyCN.js +0 -1
  234. package/dist/chunk-main-Cw2JXCil.js +0 -1
  235. package/dist/chunk-mcp-K63bhqnF.js +0 -95
  236. package/dist/chunk-migrate-BMwBV5sc.js +0 -16
  237. package/dist/chunk-migrate-CxfVmKt0.js +0 -1
  238. package/dist/chunk-migrateVerify-DSEXSpfR.js +0 -1
  239. package/dist/chunk-policy-BX0Ftdws.js +0 -1
  240. package/dist/chunk-policyGate-dmcufnwB.js +0 -2
  241. package/dist/chunk-pr-ByrGcfam.js +0 -1
  242. package/dist/chunk-project-DA3KnAZH.js +0 -1
  243. package/dist/chunk-promotion-Boedyq43.js +0 -1
  244. package/dist/chunk-promotion-D8Ti-vxp.js +0 -2
  245. package/dist/chunk-receipt-CusJaqNn.js +0 -1
  246. package/dist/chunk-receiptDeps-oVbX156d.js +0 -1
  247. package/dist/chunk-receiptGate-DrGChj7i.js +0 -1
  248. package/dist/chunk-receiptGate-xldHKMyJ.js +0 -1
  249. package/dist/chunk-refactor-B1W_MGTp.js +0 -1
  250. package/dist/chunk-refactor-BJXxEtVs.js +0 -17
  251. package/dist/chunk-report-D9pM09Nu.js +0 -1
  252. package/dist/chunk-review-UcqS5AAi.js +0 -1
  253. package/dist/chunk-say-CYb4HeJD.js +0 -1
  254. package/dist/chunk-serve-Dmqen1yd.js +0 -10
  255. package/dist/chunk-stages-BTQJrAMF.js +0 -3
  256. package/dist/chunk-systemError-BYrMzp2o.js +0 -1
  257. package/dist/chunk-systemError-CXvnhNPK.js +0 -1
  258. package/dist/chunk-taskTest-9gMsx0zu.js +0 -2
  259. package/dist/chunk-taskTest-BjXYpG5p.js +0 -1
  260. package/dist/chunk-templates-D3ouIwHD.js +0 -1
  261. package/dist/chunk-testCases-9jwT_Y7z.js +0 -4
  262. package/dist/chunk-testCases-BcpBPg9L.js +0 -1
  263. package/dist/chunk-tests-CEEXnWOp.js +0 -23
  264. package/dist/chunk-tests-CRVosdWp.js +0 -1
  265. package/dist/chunk-wrapper-B2WnOIoB.js +0 -3
  266. package/dist/chunk-wrapper-DiKCKZti.js +0 -1
  267. package/dist/web/assets/BpmnDocument-C247Rqim.js +0 -27
  268. package/dist/web/assets/CmmnDocument-Dj48bsUd.js +0 -17
  269. package/dist/web/assets/DmnDocument-Cb9Zi9fS.js +0 -41
  270. package/dist/web/assets/FormDocument-DoZaxWd-.js +0 -32
  271. package/dist/web/assets/FormDocument-URLcKn84.css +0 -1
  272. package/dist/web/assets/FormStepView-D8MFcpeI.js +0 -1
  273. package/dist/web/assets/PolicyDialog-CGdglmDn.js +0 -1
  274. package/dist/web/assets/ScriptPane-T6M5f6fc.js +0 -2
  275. package/dist/web/assets/ShortcutsDialog-BAoL9EHu.js +0 -1
  276. package/dist/web/assets/SourceDocument-C9KIzBA5.js +0 -1
  277. package/dist/web/assets/TemplateDocument-CNt2turg.js +0 -7
  278. package/dist/web/assets/TextDocument-CtkHoEqN.js +0 -1
  279. package/dist/web/assets/Viewer-DZske1C5.js +0 -4
  280. package/dist/web/assets/apply-nnKP9HIM.js +0 -1
  281. package/dist/web/assets/dist--PmHUHDp.js +0 -1
  282. package/dist/web/assets/dist-BoPrKCf2.js +0 -5
  283. package/dist/web/assets/dist-C1m02xAO.js +0 -1
  284. package/dist/web/assets/dist-CLqJMzT-.js +0 -1
  285. package/dist/web/assets/dist-D3jqq0XS.js +0 -1
  286. package/dist/web/assets/dist-DA-9F0U9.js +0 -1
  287. package/dist/web/assets/dist-DojzF5q2.js +0 -6
  288. package/dist/web/assets/dist-yvjzrXXf.js +0 -23
  289. package/dist/web/assets/dmn-DwdcYXGr.js +0 -3
  290. package/dist/web/assets/duplicate-D-ilQqKz.js +0 -342
  291. package/dist/web/assets/formChecks-CGox1z7R.js +0 -1
  292. package/dist/web/assets/frontend-Qq5hBH0U.js +0 -1
  293. package/dist/web/assets/index.es-CcNNw3VB.js +0 -78
  294. package/dist/web/assets/moddle-DJxj0oEU.js +0 -1
  295. package/dist/web/assets/platform-BLPhsye9.js +0 -2
  296. package/dist/web/assets/samples-oeXBsJ9Y.js +0 -1
  297. package/dist/web/assets/sharedReader-Bopy7Uk9.js +0 -1
  298. package/dist/web/assets/testCaseRuns-B_XdqGFh.js +0 -1
  299. package/dist/web/assets/ui-BTKMbWYG.js +0 -1
  300. package/dist/web/assets/web-FzNBw1kZ.css +0 -1
  301. package/dist/web/assets/web-jPMZVwbQ.js +0 -982
  302. package/dist/web/assets/xml-DTgZ-B-l.js +0 -1
@@ -1 +1 @@
1
- import"./rolldown-runtime-B8BYMn-z.js";import{t as e}from"./preload-helper-VRuDKI9K.js";var n=[{locale:`en`,language:`en`,name:`English`,vscode:``,quotes:[``,``]},{locale:`ru`,language:`ru`,name:`Русский`,vscode:`ru`,quotes:[`«`,`»`]},{locale:`de`,language:`de`,name:`Deutsch`,vscode:`de`,quotes:[`„`,`“`]},{locale:`zh`,language:`zh`,name:`简体中文`,vscode:`zh-cn`,quotes:[`「`,`」`],script:`hans`,preferred:!0},{locale:`ja`,language:`ja`,name:`日本語`,vscode:`ja`,quotes:[`「`,`」`]},{locale:`ko`,language:`ko`,name:`한국어`,vscode:`ko`,quotes:[`「`,`」`]},{locale:`es`,language:`es`,name:`Español`,vscode:`es`,quotes:[`"`,`"`]},{locale:`pt-BR`,language:`pt`,name:`Português (Brasil)`,vscode:`pt-br`,quotes:[`"`,`"`],regions:[`BR`],strict:!0},{locale:`fr`,language:`fr`,name:`Français`,vscode:`fr`,quotes:[`« `,` »`]},{locale:`pl`,language:`pl`,name:`Polski`,vscode:`pl`,quotes:[`„`,`”`]},{locale:`it`,language:`it`,name:`Italiano`,vscode:`it`,quotes:[`«`,`»`]},{locale:`nl`,language:`nl`,name:`Nederlands`,vscode:`nl`,quotes:[`“`,`”`]},{locale:`tr`,language:`tr`,name:`Türkçe`,vscode:`tr`,quotes:[`“`,`”`]},{locale:`uk`,language:`uk`,name:`Українська`,vscode:`uk`,quotes:[`«`,`»`]},{locale:`cs`,language:`cs`,name:`Čeština`,vscode:`cs`,quotes:[`„`,`“`]},{locale:`id`,language:`id`,name:`Bahasa Indonesia`,vscode:`id`,quotes:[`“`,`”`]},{locale:`vi`,language:`vi`,name:`Tiếng Việt`,vscode:`vi`,quotes:[`“`,`”`]},{locale:`zh-TW`,language:`zh`,name:`繁體中文`,vscode:`zh-tw`,quotes:[`「`,`」`],script:`hant`,regions:[`TW`,`HK`,`MO`]}],r={zh:{CN:`hans`,SG:`hans`,TW:`hant`,HK:`hant`,MO:`hant`}};n.map(e=>e.locale);function languageOf(e){return n.find(n=>n.locale===e)??n[0]}var i={in:`id`};function parts(e){let n=e.trim().replace(/[.@].*$/,``).replace(/_/g,`-`).split(`-`).filter(e=>e.length>0),r=(n.shift()??``).toLowerCase(),a=Object.hasOwn(i,r)?i[r]:r,o=``,s=``;for(let e of n)e.length===4?s||=e.toLowerCase():e.length===2&&(o||=e.toUpperCase());return{language:a,region:o,script:s}}function resolveLocale(e){if(typeof e!=`string`)return`en`;let{language:i,region:a,script:o}=parts(e),s=n.filter(e=>e.language===i);if(s.length===0)return`en`;let c=o||(Object.hasOwn(r,i)?r[i][a]:void 0)||``;if(c)return s.find(e=>e.script===c)?.locale??`en`;let l=a?s.find(e=>e.regions?.includes(a)):void 0;if(l)return l.locale;let u=s.find(e=>e.preferred)??s[0];return a&&u.strict?`en`:u.locale}function browserLocale(e){return resolveLocale(e?.language??(typeof navigator>`u`?void 0:navigator.language))}var a=/\{([^{}]*)\}/g;function interpolate(e,n){return n?e.replace(a,(e,r)=>{let i=Object.hasOwn(n,r)?n[r]:void 0;return i==null?e:String(i)}):e}var o={app:JSON.parse(`{"name":"Penstock","common":{"loading":"Loading…","learnMore":"Learn more","close":"Close","optional":" (optional)","add":"Add","back":"Back","cancel":"Cancel","checkAgain":"Check again","code":"Code","comments":"Comments","copy":"Copy","delete":"Delete","done":"Done","engine":"Engine","export":"Export","monitor":"Monitor","next":"Next","open":"Open","overview":"Overview","paste":"Paste","problems":"Problems","properties":"Properties","recheck":"Recheck","redo":"Redo","reload":"Reload","remove":"Remove","retry":"Retry","save":"Save","scenarios":"Scenarios","search":"Search","showAll":"Show all","skip":"Skip","stop":"Stop","undo":"Undo","variables":"Variables","more":"+{number} more","copyCommand":"Copy the command","commandCopied":"Copied"},"config":{"problem":{"syntaxWhy":"the file could not be read as YAML - {reason}.","typeOfFile":"the file should hold {expected}, it is {found}.","type":"{key} should be {expected}, it is {found}.","unknownKey":"Penstock reads no setting called {key}, so it is left out.","insteadStopped":"Nothing is read from this file until it is fixed.","insteadIde":"Penstock uses the settings from the IDE until the file is read."},"brokenTitle":"{0} could not be read","reason":{"nestedMapping":"one value is nested under a value on the same line","duplicateKey":"the same setting is written twice","tabIndentation":"a tab is used where the indent needs spaces","implicitKey":"a setting is written on the same line as the one above it","unclosed":"the file ends in the middle of a value"},"expect":{"text":"text","flag":"true or false","number":"a number","list":"a list of texts","section":"a section of settings","freeSection":"a section of settings","oneOf":"one of {values}"},"found":{"text":"text","flag":"true or false","number":"a number","list":"a list","section":"a section","nothing":"nothing"},"file":{"readsInstead":"Penstock reads this file instead of the IDE settings.","overrides":"A penstock.yaml in a subfolder overrides this one for the diagrams under it.","templatesFrom":"Folders to read Camunda element templates from:","secretsStay":"Passwords and secrets stay in the IDE password safe, never here."},"local":{"writtenBy":"Written by Penstock for this machine. Keep it out of version control.","valuesWin":"The values here win over penstock.yaml; delete a key to fall back to the project’s answer.","gitignore":"Penstock, this machine only","wrapperWhichPenstock":"The Penstock this project runs. Commit it, and everyone runs the same one.","wrapperChangeVersion":"Change the version by hand, or run: ./penstockw update [version]"}},"palette":{"label":"Command palette","search":"Find an action…","hint":"Arrow keys to move, Enter to run, Shift+Enter to pin to or unpin from the toolbar, Escape to close","actions":"Actions","matches":{"one":"{count} action","other":"{count} actions"},"noMatch":"No action matches \\"{query}\\"","pin":"Pin to the toolbar","unpin":"Unpin from the toolbar"},"export":{"title":"Export diagram","diagram":"Diagram","mainDiagram":"Main Diagram","theme":"Theme","themeLight":"Light","themeDark":"Dark","themeDracula":"Dracula","schema":"Schema","schemaDefault":"Default","schemaSketchy":"Sketchy","format":"Format","background":"Use background","cancel":"Cancel","copy":"Copy","export":"Export","exporting":"Exporting...","copyTitle":"Copy the picture with these settings, as a PNG","previewFailed":"Unable to render the diagram preview","copyFailed":"The picture could not be copied","notLoaded":"Unable to export: the diagram preview did not load","unnamedSubprocess":"Unnamed SubProcess","asFormat":"Export as {format}","untitledFile":"diagram"},"cli":{"noDiagrams":"No .bpmn files found in {paths}.","wrote":"wrote {file}","nothingWritten":"Nothing was written.","nothingChanged":"Nothing was changed.","notAGitRepository":"Not a git repository, so there is nothing to compare against.","header":{"status":"STATUS","endpoint":"ENDPOINT","files":"FILES","file":"FILE","details":"DETAILS","worker":"WORKER","name":"NAME","id":"ID","version":"VERSION","type":"TYPE","engine":"ENGINE","property":"PROPERTY","value":"VALUE","action":"ACTION","target":"TARGET","flow":"FLOW","testCases":"TEST CASES","testClass":"TEST CLASS","process":"PROCESS","scenarios":"SCENARIOS","severity":"SEVERITY","content":"CONTENT"},"trust":{"hookRefused":"hook {stage}: not run, because {root} is not a trusted project","notTrusted":"the project is not trusted, so penstock.yaml may not run shell commands here","runTrust":"run penstock trust once in this project to allow it, or pass --trust-project for this run only","questionNotTrusted":"{root} is not a trusted project.","questionPower":"penstock.yaml can run any shell command in this folder, with your own account.","questionAllow":"Allow it here and from now on? [y/N] ","questionInIt":"penstock.yaml in it may run any shell command in that folder, with your own account.","questionTrust":"Trust it on this machine? [y/N] ","once":"allowed for this run only, by --trust-project","saidNo":"No, so nothing from penstock.yaml was run.","nowTrusted":"penstock.yaml may run shell commands here now and from now on","trustedThere":"penstock.yaml may run shell commands there","nothingToTrust":"there is no penstock.yaml in it, so there is nothing to trust","nothingToTrustHint":"nothing was written. Run penstock init to write one, or penstock trust in the project folder","forgetHint":"penstock trust --forget takes an old record away","alreadyTrusted":"it is already trusted","notTrustedYet":"nothing was written, the project is still not trusted","noneTrusted":"No project is trusted on this machine.","headerProject":"TRUSTED PROJECT","headerSince":"SINCE","mayNotRun":"penstock.yaml may not run shell commands there now","notTrustedBefore":"it was not trusted"},"templates":{"noWorker":"No job worker was found: Penstock reads @JobWorker and @ExternalTaskSubscription in .java, .kt, .kts, .groovy and .scala files.","template":"TEMPLATE","workerIn":"{value} in {file}:{line}","workerInHandler":"{value} in {file}:{line}, handler {handler}","inputs":"INPUTS","action":{"written":"written","updated":"updated","unchanged":"unchanged"},"writtenFor":"Element templates for the job workers in this project, in .camunda/element-templates.","nothingToWrite":"Nothing to write: every template already says what the worker does.","summary":"{written} written, {updated} updated. Run the modeler or reload the editor to see them.","noneToCheck":"No element template in {folder}: nothing to check.","allMatch":"Every element template still matches the worker it was written from.","drifted":"{templates} no longer matches the worker:","asksFor":"asks for {name}, which the worker does not read","hasExtra":"has {name}, which the worker no longer reads","hasOtherType":"has {name} as a different type","fixHint":"Run penstock templates generate to bring them back in step.","usage":"Use templates generate to write the element templates, or templates --check to fail when one no longer matches its worker.","count":{"template":{"one":"{count} template","other":"{count} templates"},"elementTemplate":{"one":"{count} element template","other":"{count} element templates"},"operation":{"one":"{count} operation","other":"{count} operations"}},"headerDesktop":"DESKTOP MODELER","headerWeb":"WEB MODELER","loads":"loads","notLoaded":"not loaded","loadsSome":"{loaded} of {total}","diagnosed":"Element template files: {total} found, {loading} load in Camunda Desktop Modeler, {notLoading} do not.","warning":"warning: {reason}","api":{"found":"API description {title} ({format}): {operations}.","operation":"OPERATION","freePreview":"Free shows the first {shown} of {total} operations.","dryRun":"Dry run: nothing was written. Run it again with --write to write the templates into {directory}.","secrets":"Create these secrets in your connector runtime before the templates run: {names}.","written":"{created} created, {replaced} replaced in {directory}. Reload the modeler to see them.","notAFile":"{path} is not a file.","tooLarge":"{path} is larger than {megabytes} MB, which is more than a template is made from.","action":{"wouldCreate":"would create","wouldReplace":"would replace","created":"created","replaced":"replaced"},"format":{"openapi3":"OpenAPI 3","swagger2":"Swagger 2.0","postman":"Postman collection"},"badSecretPrefix":"--secret-prefix should be capital letters, digits and underscores, starting with a capital letter: {value}"}},"connectors":{"notInside":"Not a path inside the connectors directory: {path}","linkAt":"The connectors directory holds a link at {path}","holdsALink":"The connectors directory holds a link","fileInTheWay":"A file is in the way","tooLarge":"The file is larger than 64 MB","contentTooLarge":"The content is larger than 64 MB","directoryInTheWay":"A directory is in the way","nothingToMove":"Nothing to move","destinationExists":"The destination already exists","notACatalogueUrl":"Not a connector catalogue URL: {url}","githubUnreachable":"GitHub could not be reached","redirect":"GitHub answered with a redirect, which is not followed","responseTooLarge":"The response is larger than 64 MB","interrupted":"The download was interrupted","listOnly":"Only list may name the connectors directory itself","renameNeedsTarget":"Rename needs a destination","unknownOperation":"Unknown operation: {operation}","downloadFailed":"The connector templates could not be downloaded: {reason}.{when} run \`penstock connectors --refresh\` to try now.","unknownReason":"unknown reason","retriedAfter":" It is tried again automatically after {when};","usingOlder":"Using the templates downloaded for {ref}; checking for a newer release failed: {reason}","resolveUsage":"Usage: penstock connectors resolve <id> [version]","notAVersion":"Not a template version: {version}","idVersion":"{id} version {version}","noTemplate":"No template {which} in the catalogue for {ref}","cacheMissing":"The cached file for {id} is missing; run \`penstock connectors --refresh\`","summary":"Connector templates for {ref}: {current} current, {older} with older versions"},"update":{"npmFailed":"npm could not install {package}","noCli":"{package} did not contain the Penstock CLI","noWrapper":"No Penstock wrapper here or above. Run: penstock init","noLatest":"Could not find the latest {package}. Name a version: penstockw update 2.5.0","downloadFailed":"Could not download Penstock {version}: {reason}","alreadyPinned":"Penstock {version}, already the pinned version","moved":"Penstock {from} -> {to}","none":"(none)","downloaded":"downloaded {version} into {home}","alreadyDownloaded":"{version} was already downloaded","droppedDistribution":"dropped distribution={distribution}; it named {version}","commit":"Commit {scripts} and {properties}."},"license":{"notInteractive":"Signing in needs a terminal to answer in. In a pipeline, set PENSTOCK_LICENSE to your licence key instead.","codeOnItsWay":"A sign-in code is on its way to {email}.","codeQuestion":"Code from the e-mail: ","emailQuestion":"E-mail you bought Penstock with: ","nothingChangedAgain":"Nothing was changed. Run penstock license login to try again.","tooManyMachines":"Your {tier} licence is in use on {machines} machines, which is as many as it allows:","since":", since {when}","freeWhich":"Free which one for this machine? (number, or Enter to stop) ","noneBought":"There is no Penstock licence bought with {email}.","buyOrSignIn":"Buy one with penstock license buy, or sign in with the address you bought it with.","activeHere":"Penstock {tier} is active on this machine{again}. The editor in your IDE uses it too.","activeHerePlain":"Penstock {tier} is active on this machine.","again":" again","buyUsage":"penstock license buy [pro|team]","alreadyActive":"Penstock {tier} is already active on this machine.","checkoutOpen":"The checkout for Penstock {tier} is open in your browser:","waitingForPayment":"Waiting for the payment; this finishes by itself once it goes through.","paidEmailQuestion":"E-mail you paid with: ","paid":"Paid, thank you.","paymentFailed":"The payment did not go through, and nothing was charged. Run penstock license buy to try again.","checkoutExpired":"The checkout expired. Run penstock license buy to open a new one.","stoppedWaiting":"Stopped waiting. If you did pay, run penstock license login.","released":"The licence was released from this machine; it can be used on another.","cleared":"There was no seat on this machine to release; the licence file was cleared.","nothingToRelease":"There is no licence on this machine to release, or the licence service could not be reached.","trial":"There is no key yet: this machine is on the Pro trial, {left}, until {ends}.","running":"running","keyComesWithPurchase":"A key comes with a purchase: penstock license buy, or penstock license login if you bought Penstock already.","enterAKey":"To enter a key you have, run penstock license activate <key>.","noneOnThisMachine":"There is no licence on this machine{trial}. Sign in first: penstock license login","trialEnded":", and the Pro trial ended on {ends}","orBuyOne":"Or buy one: penstock license buy. To enter a key you have, run penstock license activate <key>.","teamOnly":"Only a Penstock Team key works in a pipeline, and the licence bought with that address is Pro.","buyTeam":"Buy Team with penstock license buy team.","keepKeySecret":"Keep a key secret. In a pipeline, set it as PENSTOCK_LICENSE; it takes no machine of its own and needs a Team key for the paid features.","activateUsage":"penstock license activate <key>, or sign in without a key: penstock license login","buyAndSignIn":"penstock license buy buy Pro penstock license login already bought","usage":"penstock license [status|key|activate <key>|deactivate]","serviceUnreachable":"The licence service could not be reached: {reason}","tierRow":"tier","statusRow":"status"},"drawing":{"unknownPathCommand":"path command {command} is not understood","incomplete":"the picture would be incomplete: {reason}","nothingToDraw":"the diagram has nothing to draw"},"bot":{"noRepository":"{names} is not set. The workflow that runs the bot has to run in a repository, and GITHUB_REPOSITORY is what names it.","noToken":"{names} is not set. The workflow token is the default: give the job issues: write and pull-requests: write. A token of your own goes in a secret PENSTOCK_TOKEN.","noEventPath":"{names} is not set. The workflow has to pass GITHUB_EVENT_PATH, or run the bot as an action.","noGitLabApi":"{names} is not set. GitLab sets it in every job; a run outside GitLab cannot answer a comment.","noGitLabToken":"{names} is not set. Add a CI/CD variable PENSTOCK_TOKEN: a project access token with role Developer and scope api (Settings, CI/CD, Variables).","noGitLabProject":"{names} is not set. The webhook payload carries the project id, and every GitLab job sets CI_PROJECT_ID.","noBitbucketRepo":"{names} is not set. The pipeline has to run on a pull request event, which sets it.","noBitbucketPr":"{names} is not set. The pipeline has to run on a pull request event, which sets it.","noBitbucketToken":"{names} is not set. Add a repository variable PENSTOCK_TOKEN: a repository access token with pull request write (Repository settings, Access tokens, Create token), and allow pipelines to use it.","noBitbucketBranch":"{names} is not set. The pull request event sets it.","noAzureCollection":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzureProject":"{names} is not set. The pipeline has to run in a project, which sets it.","noAzureRepository":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzurePullRequest":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzureToken":"{names} is not set. Set SYSTEM_ACCESSTOKEN to $(System.AccessToken) and let the build contribute to pull requests (Project settings, Repositories, Security, allow scripts to access the OAuth token), or set a secret PENSTOCK_TOKEN.","noAzureBranch":"{names} is not set. The pull request event sets it.","notAGitCheckout":"The bot runs in a git checkout.","unknownCi":"This does not look like a CI run penstock knows: GitHub, Gitea, Forgejo, GitLab, Bitbucket or Azure DevOps.","nothingToAnswer":"Nothing to answer.","nothingDrawn":"Nothing was drawn, so there is nothing to post.","answeredOn":"answered on {platform}","refusedSaved":"said no, and saved it for the post stage","notForPenstock":"The comment was not for penstock.","couldNotCheckOut":"Could not check out {ref}.","baseNotFound":"Could not find the base {base}.","drew":"drew {file}","answerSaved":"saved the answer for the post stage","unknownStage":"Unknown stage: {stage}. Use draw or post.","count":{"element":{"one":"{count} element","other":"{count} elements"}},"elementsNotDrawn":"{elements} not drawn, the editor cannot draw them either - {ids}","theFork":"the fork {head}","aForkNoLongerExists":"a fork that no longer exists","fromAnotherFork":"This pull request comes from {head}, not from {base}, so the bot did not check it out and did not run anything from it. Push the branch to {base} and the bot will answer there.","noPictureBecause":"{file}: no picture, because {reason}. A picture that might be wrong is not shown.","picturesInArtifacts":"The pictures are in this build’s artifacts.","sayWhatToCompareWith":"Say what to compare with: \`/penstock diff <commit, branch or tag>\`.","couldNotFindRef":"I could not find \`{ref}\` in this repository.","diagramsChangedSince":"## Diagrams changed since \`{ref}\`","noDiagramChangedHere":"No diagram changed here.","cleanAgainstTheBaseline":"No problems. The drawing is clean against the baseline.","noDiagramToDraw":"No diagram to draw. Name one: \`/penstock image path/to/process.bpmn\`.","notInThisChange":"\`{file}\` is not in this change.","drawnButNotShown":"Drawn, but not shown here: {files}. [{open}]({link}).","openThem":"open them","couldNotDoThat":"I could not do that: {reason}","help":{"intro":"I read the diagrams in this change. Ask me in a comment:","report":"- \`/penstock\` - the full review: problems, what changed, pictures","check":"- \`/penstock check\` - only the problems","diff":"- \`/penstock diff <commit, branch or tag>\` - what changed since then, with the changes outlined","image":"- \`/penstock image [path.bpmn]\` - a picture of the diagram as it is now"}},"hook":{"exited":"exited {code}"},"hooks":{"skipped":"hooks - this is not a git repository","keptOther":"it already does something else","wrote":"formats and checks the diagrams a commit carries"},"doctor":{"buildEngine":"the build uses the {build} libraries, but penstock.yaml says {engine}","reachable":"reachable ({status})","answered":"answered {status}","unreachable":"unreachable - {reason}","noConfig":"none found - run: penstock init","noEngine":"not set - the editor cannot choose a palette without it","noProfiles":"(none)","missing":"missing: {path}","noUrl":"no url set","deployment":"{url} - {state}","variablesNeedPro":"{mode}, needs Penstock Pro","aiVerify":"repair attempts: {attempts}, stored receipts: {kept}, pipeline gate: {gate}","aiVerifyNeedsPro":"{summary}, needs Penstock Pro (Team in a pipeline)","on":"on","off":"off"},"export":{"unknownFormat":"Unknown export format: {format}. Use svg or png.","needsBrowser":"A PNG needs a browser to paint the SVG, which penstock does not carry. SVG needs nothing.","installBrowser":"Install it once, in the project or globally:","notDrawn":" not drawn, as in the editor: {element}"},"convert":{"targetMissing":"say what to convert to: --to operaton","unknownTarget":"--to takes operaton, the engine Camunda 7 and CIB seven diagrams convert to; it was {target}","unchanged":"already in the Operaton namespace, or not a Camunda 7 diagram","wouldChange":"would move the camunda: names to operaton: (pass --write to save)","changed":"moved the camunda: names to operaton:"},"fmt":{"alreadyFormatted":"already formatted","formattedXml":"formatted XML","wouldFormat":"would format XML (pass --write to save)","formLeftAlone":"a form is JSON and fmt rewrites XML only, so it is left as it is"},"create":{"shouldBe":"{where} should be {what}","anObject":"an object","aList":"a non-empty list","someText":"a non-empty text","oneOf":"one of {list}","entries":"a list of texts, one per column (columns: {count})","aName":"a name of letters, digits, underscore, dot and dash, starting with a letter or underscore","unique":"different from the other keys: {key} is used twice","onlyChoices":"given only for checklist, radio, select and taglist","trueOrFalse":"true or false","unknownKey":"{where} has no field {key}. It has {allowed}.","oneOfStepsOperations":"spec takes steps or operations, one of them","badExtension":"{file} should end in .bpmn, .dmn or .form","exists":"{file} already exists, and create_diagram never overwrites a file. Nothing was written.","noDescriptionForForms":"A form has no place for a description. Nothing was written."},"diff":{"baseNotFound":"Could not find the base {base}. Give a commit, branch or tag that is in this checkout.","noDifference":"No diagram differs from {base}.","baseIsPath":"{base} is a file, not a commit, branch or tag. To compare two files, give both as files: penstock diff <before> <after>.","newSince":"{file} - new since {base}","picture":"picture {file}","noPicture":"no picture: {reason}","before":"before {file}","after":"after {file}","noPictures":"no pictures: {reason}","added":"added","removed":"removed","changed":"changed","differentKinds":"{before} and {after} are not the same kind of file, so they cannot be compared.","onlyMoved":"Only the drawing moved ({elements}).","noDifferenceFound":"No difference.","movedOnCanvas":"and {elements} only moved on the canvas","count":{"element":{"one":"{count} element","other":"{count} elements"}}},"report":{"baseNotFound":"Could not find the base {base}. Give --base a commit, branch or tag that is in this checkout.","heading":"## Diagrams in this change","nothingChanged":"No diagram changed.","removed":"### Removed","check":"### Check","cleanAgainstTheBaseline":"Nothing new. The drawing is clean against the baseline.","whatChanged":"### What changed","newFile":"new","onlyTheDrawingMoved":"Only the drawing moved.","howItLooks":"### How it looks","thePicturesLink":"The pictures, with what changed outlined: [open them]({link}).","noPictures":"_No pictures this time._","outlined":"_What changed is outlined: green arrived, amber differs._"},"share":{"needsDiagram":"share needs a diagram: penstock share process.bpmn -o process.html","notADiagram":"{file} is not a .bpmn, .dmn or .form file, so there is nothing to share.","offline":"One file, opens offline in any browser; nothing in it reaches the network."},"import":{"needsFile":"import needs a file: penstock import diagram.drawio -o process.bpmn","missing":"{file} does not exist.","exists":"{file} already exists. Nothing was written; use -o for another name, or --force to replace it.","routes":"The routes of the connectors are as drawn; Auto Layout (Pro) can tidy them: penstock layout {file} --write","badFrom":"--from takes modeler, signavio, bizagi or flowable, not {from}.","badTo":"--to takes camunda7 or camunda8, not {to}.","folderNeedsModeler":"{file} is a folder. To read a Camunda Modeler project, use --from modeler.","notFolder":"{file} is not a folder that can be read.","uncFolder":"{file} is a network path, which is not read.","keymapWritten":"Wrote {file}: the Camunda Modeler keymap for VS Code. Merge it into your keybindings.json.","reportOnly":"Nothing was written.","outsideProject":"{file} is outside the project, so nothing was written."},"docs":{"format":"docs writes --format html (the default), md, docx or pdf.","pdfFont":"{file}: no font with these characters was found on this machine, so the PDF shows them as ?: {characters}","writtenSummary":"{pages} written{because}","count":{"step":{"one":"{count} step","other":"{count} steps"},"problem":{"one":"{count} problem","other":"{count} problems"},"page":{"one":"{count} page","other":"{count} pages"},"process":{"one":"{count} process","other":"{count} processes"},"decision":{"one":"{count} decision","other":"{count} decisions"},"form":{"one":"{count} form","other":"{count} forms"},"field":{"one":"{count} field","other":"{count} fields"}},"check":"Check","step":"Step","runs":"Runs","who":"Who","form":"Form","way":"Way","goesTo":"Goes to","when":"When","events":"Events","event":"Event","trigger":"Trigger","data":"Data","variable":"Variable","size":"Size","allDiagrams":"All diagrams","diagramsOf":"{project} diagrams","everyPathEnds":"Every path through the process reaches an end: no deadlocks, nothing runs twice, nothing is unreachable.","runsToItsEnd":"runs to its end","noTwoRulesMatch":"No two rules match the same input, and every input has a rule.","everyInputHasOneRule":"every input has one rule","everyFieldHasItsOwn":"every field has its own variable"},"migrate":{"apply":{"unknownWorkers":"Unknown worker language {value}; use one of {values}.","refused":"Nothing was written, because these files cannot be written safely:","nothing":"Nothing to apply: no Camunda 7 file is left to convert.","dryRun":"Dry run: nothing was written. This is what --write would change.","freePreview":"Free preview: the first {shown} of {total} elements. Writing and the whole diff are part of Penstock Pro.","wouldCreate":"would create {file}","skipped":"Skipped {file}: it {reason}","summaryWritten":"{rewritten} files rewritten, {created} created. {converted} elements converted, {manual} need a person, {review} to check.","summaryDry":"{rewritten} files would be rewritten, {created} created. {converted} elements converted, {manual} need a person, {review} to check.","verifyClean":"Checked as Camunda 8: nothing found.","verifyFound":"Checked as Camunda 8: {errors} errors, {warnings} warnings.","reportWritten":"MIGRATION.md lists what a person still has to do. Camunda 7 delegate classes were not touched.","runWrite":"Run the same command with --write to apply this."},"ready":"ready","converts":"converts","needsWork":"needs work","blocked":"blocked","unknownTarget":"Unknown target {target}. Camunda 8 versions Penstock converts for: {versions}.","baselineWritten":"wrote {file} with {findings}","nothingToMigrate":"There is nothing to migrate: no Camunda 7 diagram, decision or form was found.","toDo":"{count} to do","toCheck":"{count} to check","convert":"{count} convert","headerTodo":"TO DO","headerToCheck":"TO CHECK","headerConvert":"CONVERT","andMore":"and {count} more","totals":"{files} to migrate for Camunda {target}: {ready} ready, {converts} to convert, {needsWork} with work to do, {blocked} blocked.","newAndAccepted":"{fresh} new, {known} accepted","nothingNew":"nothing new, {known} accepted","instancesStay":"Running instances and history stay on Camunda 7 until they finish or are moved with the Data Migrator. penstock migrate report writes all of this as a page to hand on.","unreadable":"it could not be read","leftOpen":"{changes}, {open} left open","wouldWrite":"would write {file}: {reason}","staysOpen":"stays open:","alreadyThere":"{file} is already there and was not written over","left":"left: {where}: {title}. {action}","nothingToConvert":"There is nothing to convert: {reason}.","notCamunda7":{"one":"{files} is not Camunda 7","other":"{files} are not Camunda 7"},"noneFound":"no Camunda 7 diagram, decision or form was found","dryRunFolder":"The converted files would go into {folder}, with a penstock.yaml of their own that says engine: camunda-8. Pass --out <dir> to put them somewhere else.","configKept":"{file} is already there and was kept.","configWritten":"wrote {file} (engine: camunda-8), so the converted files open and are checked as Camunda 8. Set deployment.url to your Camunda 8 cluster.","camunda7Untouched":"The Camunda 7 files are untouched. Every job type above needs a job worker before anything runs. The IDE writes a skeleton from each delegate; running instances stay on Camunda 7.","count":{"finding":{"one":"{count} finding","other":"{count} findings"},"file":{"one":"{count} file","other":"{count} files"},"change":{"one":"{count} change","other":"{count} changes"}},"wouldConvert":"would convert","converted":"converted","plan":{"noSavedSelection":"There is no saved selection in .penstock/migration-selection.json.","columnId":"Change id","columnRisk":"Class","columnReason":"Reason","summary":"{accepted} of {total} changes accepted, about {hours} h of work left by hand.","saved":"Selection saved to .penstock/migration-selection.json."}},"init":{"licenceHint":"the bot, reports and baselines run on Penstock Team: put the key from \`penstock license key\` in {where}","teamHint":"with Penstock Team the pipeline also gets the review bot, SARIF annotations and baselines: \`penstock license buy team\`, then run init again","githubWorkflowToken":"the bot answers in pull requests with the workflow token; nothing to register","githubForks":"a pull request from a fork is not answered: the bot would have to run the fork with a token that can write to this repository","updateHint":"the workflow runs the Penstock action at a fixed commit, so the licence secret cannot reach code that changed later;","updateHow":"to move it on, look the commit up with \`gh api repos/kern0x1b/penstock-release/commits/main --jq .sha\` and change ACTION_REF in the CLI","secretLicence":"a secret PENSTOCK_LICENSE","giteaWorkflowToken":"the bot answers with the workflow token, or PENSTOCK_TOKEN when that is set","gitlabToken":"add a CI/CD variable PENSTOCK_TOKEN: a project access token, role Developer, scope api","gitlabWebhook":"to answer /penstock comments, add a webhook with Comments events pointing at","gitlabTriggerIsSecret":"that trigger token is a secret: anyone holding the URL can start pipelines on your project","gitlabKeepUrl":"keep the URL in the webhook settings only, never in a committed file, a comment or a shared link, and rotate it under Settings, Webhooks if it ever shows up in a job log","maskedLicence":"a masked CI/CD variable PENSTOCK_LICENSE","bitbucketToken":"add a repository variable PENSTOCK_TOKEN: a repository access token with pull request write","bitbucketTokenHow":"Repository settings, Access tokens, Create token, and allow pipelines to use it","securedLicence":"a secured repository variable PENSTOCK_LICENSE","azureContribute":"let the build service contribute to pull requests (Project settings → Repositories → Security)","azureToken":"the pipeline already sets SYSTEM_ACCESSTOKEN to $(System.AccessToken); without the setting above it stays empty","azurePolicy":"for Azure Repos, add this pipeline as a build validation branch policy","pipelineLicence":"a secret pipeline variable PENSTOCK_LICENSE","engine":{"camunda8":"Camunda 8","camunda7":"Camunda 7","operaton":"Operaton","cibSeven":"CIB seven","classic":"Classic BPMN, no engine","flowable":"Flowable","activiti":"Activiti"},"engineQuestion":"Which engine does this project run on?","numberQuestion":"Number [1]: ","gitignore":".gitignore with {entry}","unknownExample":"Unknown example: {example}. Use {names} or {last}.","folderNotEmpty":"{folder} is not empty. An example is written into an empty folder, so it never overwrites your files.","exampleReadme":"the README next to them says how to run it","unknownEngine":"Unknown engine: {engine}. Use {names} or {last}.","configWhatItIs":"What this project is. Commit it.","engineDoesNotFit":"The {example} example runs on {label}, so --engine {engine} does not fit it. Leave --engine out, or drop --example.","asTheExampleWroteIt":"as the example wrote it","alreadyAnswers":"it already answers for this project","engineNotUsed":"--engine {engine} was not used: {file} already says {says}","whatItRunsOn":"what the project runs on","includeFrom":"include it from .gitlab-ci.yml","mergeInto":"merge it into bitbucket-pipelines.yml","unknownCi":"Unknown CI: {ci}. Use github, gitea, forgejo, gitlab, bitbucket or azure."},"edit":{"editorRefused":"the editor refused: {reason}","operationFailed":"operation {number}: {message}","didNotReadBack":"The result did not read back cleanly, so it was not written.","changedWhileEditing":"The diagram changed while the edit was being made, so it was not written over.","nothingBroken":"ok nothing broken","breaksTheDrawing":"fail breaks the drawing: {problems}","readsLessWell":"note reads less well: {things}","element":"Id of the element, as show_diagram lists it.","dryRun":"\\\\nDry run: {file} was not changed.","wouldBreak":"\\\\n{file} was not changed: the edit would break the drawing. Pass --force to write it anyway.","mustLookLikePairs":"{where} \\"{entry}\\" must look like key=value","sayWhatToDo":"say what to do: add, connect, set or remove, or pass --ops with the operations as JSON","unknownField":"unknown field \\"{key}\\"; allowed: {allowed}","mustBeAString":"\\"{field}\\" must be a non-empty string","mustBeAStringShort":"\\"{key}\\" must be a string","propertiesMustBeAnObject":"\\"properties\\" must be an object","notAnEngineProperty":"\\"{key}\\" is not a {engine} property; allowed: {allowed}","mustBeABoolean":"\\"{key}\\" must be true or false","mustBeAWholeNumber":"\\"{key}\\" must be a whole number","mustMapNamesToStrings":"\\"{key}\\" must map names to strings","noOperations":"no operations given","mustBeAnObject":"must be an object","elementMustBeOneOf":"\\"element\\" must be one of {elements}","eventMustBeOneOf":"\\"event\\" must be one of {events}","eventOnlyForEvents":"\\"event\\" only applies to events","idMustBeValid":"\\"id\\" must be a valid XML id","opMustBeOneOf":"\\"op\\" must be add, connect, set, remove or move","property":{"name":"The label shown on the element.","documentation":"The documentation text of the element.","condition":"The condition expression of a sequence flow, such as \${approved}.","conditionSimple":"The condition expression of a sequence flow.","feelCondition":"The FEEL condition of a sequence flow, such as =approved.","class":"The Java class implementing the task.","delegateExpression":"An expression resolving to a delegate bean, such as \${reserveStock}.","expression":"An expression the task evaluates.","resultVariable":"Where the result of expression goes.","topic":"Makes the task an external task on this topic.","asyncBefore":"Starts a transaction before the element.","asyncAfter":"Starts a transaction after the element.","assignee":"Who the user task is assigned to.","candidateUsers":"Comma-separated users who may claim the task.","candidateGroups":"Comma-separated groups who may claim the task.","formKey":"The form the user task shows.","calledElement":"The process a call activity starts.","inputs":"Input parameters: name to value or expression.","outputs":"Output parameters: name to value or expression.","jobType":"The job type a worker subscribes to.","retries":"How often a failed job is retried.","formId":"The id of the linked form the user task shows.","processId":"The process a call activity starts.","inputMappings":"Input mappings: target variable to FEEL source.","outputMappings":"Output mappings: target variable to FEEL source.","decisionRef":"The decision a business rule task calls.","decisionId":"The id of the decision a business rule task calls.","async":"Runs the element as a separate job, in its own transaction.","skipExpression":"An expression that, when true, makes the engine skip the task."},"schema":{"title":"Penstock edit operations","titleFor":"Penstock edit operations for {engine}","onlyOn":" Only on {types}.","add":"Add an element after an existing one; it is placed and connected the way the editor does it.","after":"The id of the element the new one follows.","event":"For events: what kind of event.","newId":"The id to give it; by default the project convention decides.","connect":"Connect two elements with a sequence flow.","set":"Change properties of an element or a flow.","remove":"Remove an element and its connections.","move":"Move an element by dx and dy, in diagram units."},"noSuchElement":"there is no element \\"{id}\\"","set":"set {keys} on {id}","isTheRoot":"\\"{id}\\" is the diagram's root","removed":"removed {id}","isAConnection":"\\"{id}\\" is a connection; add after an element","afterEndEvent":"nothing can follow the end event \\"{id}\\"","addAfterAnElementInside":"\\"{id}\\" is a {type}; add after an element inside it","added":"added {type} {id} after {after}","idTaken":"the id \\"{id}\\" is already taken","noSequenceFlow":"a sequence flow cannot go from \\"{from}\\" to \\"{to}\\"","connect":"connect {from} -> {to} as {id}","doesNotApply":"\\"{key}\\" does not apply to {type} \\"{id}\\"","needsDiagram":"edit needs a diagram: penstock edit process.bpmn add service-task --after Task_check","isAFolder":"{from} is a folder, not a file of operations","notJson":"The operations in {from} are not JSON: {reason}","operationWhere":"operation {number}","count":{"newProblem":{"one":"{count} new problem","other":"{count} new problems"},"thing":{"one":"{count} thing","other":"{count} things"}},"mustBeANumber":"\\"{field}\\" must be a number","moved":"moved {id} by {dx}, {dy}"},"help":{"migrateApply":{"summary":"Rewrite the Camunda 7 BPMN, DMN and forms in place for Camunda 8, translate the expressions it can and list the ones it cannot, write a job worker skeleton for each job type and MIGRATION.md, then check the result as Camunda 8. Without --write it prints a unified diff and writes nothing; it never deletes a file and never follows a symbolic link out of the project.","licence":"Writing is part of Penstock Pro, and Team in a pipeline. The diff of the first 3 elements, and migrate analyze, are free.","exits":{"0":"0 nothing is left to convert, or the converted files check with no error","1":"1 the checked result has an error, a file could not be read, or nothing was written because a file changed","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"options":"Options","example":"Example","licence":"Licence","exitCodes":"Exit codes","option":{"migrateWrite":"with apply: write the changes; without it apply only prints the diff","migrateWorkers":"with apply: the job worker skeletons, spring (default), java, node or python","profile":"use this profile, as PENSTOCK_PROFILE would","migrateOnly":"with apply or plan: accept only these change ids, comma separated, from migrate plan","migrateExclude":"with apply or plan: leave these change ids out, comma separated","migrateSaved":"with apply or plan: use the selection saved in .penstock/migration-selection.json","migrateSaveSelection":"with plan: save the selection to .penstock/migration-selection.json","migrateScenarios":"with verify: run only the scenario files that match","migrateRunUnreviewed":"with verify: run even though the conversion adds executable content that you have not reviewed","migrateOriginalProfile":"with verify: the profile of the Camunda 7 test engine, the default profile without it","migrateConvertedProfile":"with verify: the profile of the Camunda 8 test engine"},"init":{"summary":"Write a penstock.yaml for this project: the engine it runs on, the rules, the profiles and the deployment. Asked in a terminal when the folder is empty and nothing says otherwise.","licence":"Free.","exits":{"0":"0 the file was written","1":"1 the folder could not be written, or the file is already there","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"engine":"camunda-8, camunda-7, operaton, cib-seven, flowable, activiti or classic","example":"camunda-8 or camunda-7, to write a small runnable project into an empty folder","ci":"github, gitea, gitlab, bitbucket or azure: write a pipeline for the tier this machine has","hooks":"install a pre-commit hook that formats and checks staged diagrams","profile":"use this profile, as PENSTOCK_PROFILE would"}},"doctor":{"summary":"Check the setup: which configuration layers are in force, which profiles, rules, element templates and engine.","licence":"Free.","exits":{"0":"0 the setup was read","1":"1 something in it could not be read, and the answer says what","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"json prints the configuration as it resolved, for a tool to read","profile":"use this profile, as PENSTOCK_PROFILE would"}},"check":{"summary":"Everything wrong with the diagrams, in sections: the drawing itself, the bpmnlint rules and, on Pro, how the processes, decisions and forms actually run. Case models (.cmmn) get the case checks.","licence":"Free. With these it is part of Penstock Pro, and Team in a pipeline:\\n --only flow flow analysis, the deadlocks and the branches that run twice\\n --baseline a baseline of findings that are already accepted\\n --format sarif|github the findings as annotations on the changed lines\\n --require-receipt fail when a change an agent made has no receipt","exits":{"0":"0 nothing was found, or everything found is in the baseline","1":"1 something was found that a person can act on","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"only":"which parts to run: drawing, rules, flow","format":"text, json, sarif or github; sarif and github are for a code review","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would","requireReceipt":"fail when a change an agent made has no valid receipt in .penstock/receipts; ai.verify.requireReceipt does it on every check","base":"the git ref the changes are counted from for --require-receipt; origin/main by default","ci":"check the policy pack as a pipeline does: the pin, any weakened rule or palette and the required checks; the pipeline name is only a label and may be left out; a CI environment variable does the same"}},"migrateAnalyze":{"summary":"Read the Camunda 7 diagrams and say what does not carry over to Camunda 8, and why.","licence":"Free. With these it is part of Penstock Pro, and Team in a pipeline:\\n --baseline a baseline of findings that are already accepted\\n --format sarif|github the findings as annotations on the changed lines","exits":{"0":"0 nothing would be lost, or everything lost is in the baseline","1":"1 something would be lost","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"migrateConvert":{"summary":"Write the Camunda 8 files into a camunda-8 folder next to the one given, with a penstock.yaml of their own. Nothing else in the project is touched.","licence":"The conversion is part of Penstock Pro, and Team in a pipeline. Reading it with migrate analyze, and the report, are free.","exits":{"0":"0 the files were written, or --dry-run found nothing to write","1":"1 something could not be converted, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"migrateReport":{"summary":"Write the migration report to hand on: what each diagram became, and what did not come across.","licence":"Free.","exits":{"0":"0 the report was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"code":{"summary":"Check the diagrams against the code: job types, topics, classes and beans with nothing to run them, and workers no diagram uses.","licence":"Diagram and code checks are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 every worker and every reference lines up","1":"1 something does not, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the findings are reported","profile":"use this profile, as PENSTOCK_PROFILE would"}},"facts":{"summary":"Read a list of files on standard input, as {\\"files\\": [{\\"path\\": \\"...\\", \\"text\\": \\"...\\"}]}, and print the worker contracts they hold as JSON, for the editor to read the Python, Go, C# and Scala workers it cannot read itself.","licence":"Code links are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the contracts were printed","1":"1 the input is not a list of files","2":"2 the CLI itself failed, not the command; the message says what"}},"templatesGenerate":{"summary":"Write an element template for every job worker the project has, into .camunda/element-templates, so the Camunda palette fills itself in. Given an OpenAPI 3, Swagger 2.0 or Postman collection file instead of a folder, make one REST connector template per operation, with typed inputs, authentication from its security schemes as secrets placeholders, a result expression and error handling. From a file it prints what it would write and writes nothing without --write.","licence":"Writing element templates is part of Penstock Pro, and Team in a pipeline. The first 3 operations of an API description are previewed free.","exits":{"0":"0 every worker has a template, or the API description was read and the templates made","1":"1 a worker could not be written, the description could not be read, or a file was refused","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"check":"check instead of write: the same as templates check, and writes nothing","profile":"use this profile, as PENSTOCK_PROFILE would","format":"how the answer is printed; json is for a pipeline","out":"with an API description: where the templates are written, .camunda/element-templates of the project by default","write":"with an API description: write the templates; without it the answer is what would be written","secretPrefix":"with an API description: the namespace of the secret names the templates read, PENSTOCK_<API> by default; capitals, digits and underscores"}},"templatesCheck":{"summary":"List every element template file in the project, say whether Camunda Desktop Modeler and Web Modeler load it and the exact reason when one does not, then check that every template still says what its job worker asks for. Writes nothing.","licence":"Free.","exits":{"0":"0 every template file loads and still matches its worker","1":"1 a template does not load or has drifted, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"check":"what templates generate takes to do this instead of writing","profile":"use this profile, as PENSTOCK_PROFILE would","format":"how the answer is printed; json is for a pipeline"}},"scenariosList":{"summary":"List every distinct way through each process, with the conditions it takes. This is a test plan.","licence":"Process scenarios are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the scenarios were listed","1":"1 a process could not be read, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the scenarios are listed; md is a page a person reads","profile":"use this profile, as PENSTOCK_PROFILE would"}},"scenariosRun":{"summary":"Run the Camunda test-case files of the diagrams against the engine they name, step by step, with the mocks the file asks for.","licence":"Running a process against an engine is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"timeout":"how long one step may take, 30 by default","junitXml":"where a JUnit XML report is written","junit":"write a Camunda Process Test class that runs them instead","teamcity":"report as TeamCity service messages, as the IDE reads them","profile":"use this profile, as PENSTOCK_PROFILE would"}},"testCases":{"summary":"The command behind scenarios run and scenarios generate: run the Camunda test-case files of the diagrams against the engine they name, step by step, with the mocks the file asks for. --generate writes those files from the ways through each process instead.","licence":"Running a process against an engine, and writing its test-case files, is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"generate":"write the test-case files from the ways through each process, instead of running them","junit":"write a Camunda Process Test class that runs them instead","junitXml":"where a JUnit XML report is written","timeout":"how long one step may take, 30 by default","teamcity":"report as TeamCity service messages, as the IDE reads them"}},"scenariosGenerate":{"summary":"Write the Camunda test-case files from the ways through each process, which scenarios run then plays back against an engine.","licence":"Writing test-case files is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"timeout":"how long one step may take, 30 by default","junitXml":"where a JUnit XML report is written","teamcity":"report as TeamCity service messages, as the IDE reads them","profile":"use this profile, as PENSTOCK_PROFILE would"}},"junit":{"summary":"Write a JUnit test for every way through each process, with the variables that take it there, for Camunda Process Test or camunda-bpm-assert.","licence":"Process tests are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the tests were written","1":"1 a test could not be written, and the answer names the process","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"where the tests are written","package":"the package the tests are written in","profile":"use this profile, as PENSTOCK_PROFILE would"}},"layout":{"summary":"Lay the diagrams out as a readable left-to-right flow, whatever they were drawn like.","licence":"Auto layout is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the diagrams do not overlap and nothing runs through a shape","1":"1 a diagram could not be laid out, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"write":"save what was laid out; without it the answer is the plan and the file is untouched","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would"}},"convert":{"summary":"Move a Camunda 7 or CIB seven diagram to the Operaton namespace, so an Operaton project reads it. Without --write the answer is the list and the files are untouched.","licence":"Free.","exits":{"0":"0 every diagram is in the Operaton namespace, or was made so","1":"1 a file could not be read, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"to":"the engine the diagrams are converted to; operaton is the only one","write":"save the converted diagrams; without it nothing is written"}},"fmt":{"summary":"Rewrite the XML the way the editor saves it, so a diff of a diagram stays readable.","licence":"Free.","exits":{"0":"0 every file is already formatted, or was","1":"1 a file could not be parsed, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"write":"save the result; without it the answer is the diff and the file is untouched","profile":"use this profile, as PENSTOCK_PROFILE would"}},"diff":{"summary":"What changed between two versions of a process: two files, or what the working tree changed since a commit, a branch or a tag.","licence":"Free. The pictures with --images are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 nothing changed","1":"1 something did, and the answer lists it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"images":"render before and after, with the changes coloured","out":"where the pictures are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"export":{"summary":"Render the diagrams as pictures, one file per diagram. Case models (.cmmn) are drawn too.","licence":"Free.","exits":{"0":"0 every diagram was written","1":"1 a diagram could not be rendered, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"svg or png; the format the export is asked for","out":"where the pictures are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"share":{"summary":"One HTML file to send: a read-only viewer with zoom, pan and the documentation of each element. It opens offline, with nothing else on the page.","licence":"Free.","exits":{"0":"0 the file was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"the file to write; -o is the same","profile":"use this profile, as PENSTOCK_PROFILE would"}},"import":{"summary":"Turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN 2.0, and list what could not be mapped. A Camunda Modeler project folder is read with --from modeler.","licence":"Free.","exits":{"0":"0 the diagram was written","1":"1 something could not be mapped, and the answer says what","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"the file to write; -o is the same; with --from modeler on a folder, the VS Code keymap file","force":"replace a file that is already there","format":"json reports what could not be mapped as a document a tool can read","profile":"use this profile, as PENSTOCK_PROFILE would","from":"the tool the file came from; the import refuses a file that is from another one, and modeler reads a project folder","to":"for Flowable: the Camunda version its extensions are converted to, camunda7 without it","report":"write nothing and say only what was converted, kept and could not be mapped","modelerData":"with --from modeler: the Camunda Modeler user data folder, instead of the usual one"}},"docs":{"summary":"Write documentation for every process, decision file and form: a page each, with the picture, the steps, the decisions, the events and the data.","licence":"Process documentation is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the pages were written","1":"1 a page could not be written, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"html, md, docx or pdf","out":"where the pages are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"report":{"summary":"One markdown comment for a pull request: the check, the diff and a picture of every diagram that changed.","licence":"Pull request reports are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the report was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"base":"what the report compares against, origin/main by default","out":"where the markdown is written","imagesDir":"where the pictures are written","imageBase":"where the pictures will be served from, for a comment that shows them","imagesLink":"where to find them instead, when they cannot be shown inline","profile":"use this profile, as PENSTOCK_PROFILE would"}},"bot":{"summary":"Answer in a pull or merge request, from the CI run it is in. penstock init --ci sets the pipeline up.","licence":"The review bot is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the answer was posted, or the pictures were drawn","1":"1 it could not be, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"stage":"draw the pictures now and post later, when they are uploaded between","profile":"use this profile, as PENSTOCK_PROFILE would"}},"deploy":{"summary":"Deploy the processes, decisions and forms to the engine the configuration names. With --only-changed, a resource whose normalised content equals the latest version on the engine is left out, so deploying the same diagram again makes no new version.","licence":"Free.","exits":{"0":"0 the engine took the deployment","1":"1 it did not, and the answer says what it said","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"dryRun":"say what would be sent, and send nothing","wait":"confirm with the engine that the definitions are live","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would","onlyChanged":"leave out what the engine already has, unchanged, and say so for each resource","confirm":"the name of a deployment marked protected, typed again","approveFile":"in a pipeline, the approval record a protected deployment needs"}},"show":{"summary":"List a diagram's elements, flows and properties, for a person or for a tool to read.","licence":"Free.","exits":{"0":"0 the diagram was read","1":"1 it is not a diagram, or not there, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"json is the same document a tool reads","profile":"use this profile, as PENSTOCK_PROFILE would"}},"edit":{"summary":"Add, connect, set or remove in a diagram the way the editor would, and refuse an edit that would break it.","licence":"Editing from the command line is part of Penstock Pro, and Team in a pipeline. Reading the contract with --schema is free.","exits":{"0":"0 the diagram was changed, or --dry-run found nothing to change","1":"1 the edit would break the diagram, or could not be read, and nothing was written","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"ops":"the operations as JSON on one line","opsFile":"the operations as JSON in a file, or - to read them from standard input","schema":"print the contract the operations follow, and change nothing","after":"add after this element, the way the editor places a new one","event":"the event type to add","name":"the name of the element that is added, connected or set","id":"the id of the element to set or remove","condition":"the condition of a sequence flow that is connected","set":"an attribute to set, more than once","input":"an input mapping, more than once","output":"an output mapping, more than once","dryRun":"say what would change and write nothing","force":"write even when the edit would break the diagram","profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseStatus":{"summary":"Which licence this machine has, and why it is that one.","licence":"Free.","exits":{"0":"0 the answer was read","1":"1 the licence service could not be reached, and the machine stays as it was","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseKey":{"summary":"The key for PENSTOCK_LICENSE in a pipeline, found again by the e-mail you bought with, because the machine no longer keeps it.","licence":"Free.","exits":{"0":"0 the key was found","1":"1 there is no Team key bought with that address, or there is no terminal to ask on","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseBuy":{"summary":"Buy Penstock. The checkout opens in a browser and the licence reaches this machine by itself once you have paid.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 the payment did not go through, or nothing was charged","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseLogin":{"summary":"Sign in with the e-mail you bought Penstock with. There is no key to copy.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 there is no licence bought with that address","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseActivate":{"summary":"Use a key you already have.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 the key was not accepted, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseLogout":{"summary":"Release this machine's licence so another machine can use it. The same as license deactivate.","licence":"Free.","exits":{"0":"0 the licence was released, or there was no seat to release","1":"1 the licence service could not be reached","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"trust":{"summary":"Let this project's penstock.yaml run shell commands here. A hook of check, layout or deploy asks for this first, and a project with no penstock.yaml is not trusted at all.","licence":"Free.","exits":{"0":"0 the project is trusted, forgotten, or the list was printed","1":"1 there is no penstock.yaml there to trust, or the path is not there","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"list":"print what is trusted on this machine","forget":"take one project back","yes":"do not ask, which is what a pipeline wants","profile":"use this profile, as PENSTOCK_PROFILE would"}},"mcp":{"summary":"Serve BPMN diagrams to an AI agent over MCP. Reading a diagram and checking it are free; flow analysis, scenarios, code links and editing need a licence.","licence":"list_diagrams, show_diagram and check_diagram are free. The others are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the server stopped, or the client entry was printed","1":"1 a tool was asked for something this machine does not have","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"config":"print the client entry to paste into the agent, and stop","project":"the project every tool works on, without the agent naming it; nothing outside it is read"}},"connectors":{"summary":"List Camunda's connector templates, or where they are cached on this machine. Downloaded from GitHub at most once a day.","licence":"Free.","exits":{"0":"0 the list was printed","1":"1 the release list could not be downloaded, and the answer says when it will try again","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"refresh":"check GitHub for a newer release now","profile":"use this profile, as PENSTOCK_PROFILE would"}},"connectorsResolve":{"summary":"Print one connector template, resolved to the version asked for or to the newest one in the cache.","licence":"Free.","exits":{"0":"0 the template was printed","1":"1 there is no template with that id, and the answer says what there is","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"refresh":"check GitHub for a newer release first","profile":"use this profile, as PENSTOCK_PROFILE would"}},"update":{"summary":"Move the project's wrapper to a version, the latest by default.","licence":"Free.","exits":{"0":"0 the wrapper was moved","1":"1 it could not be, and the answer says which step refused","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"distribution":"where to get Penstock from: a tarball or a registry spec","profile":"use this profile, as PENSTOCK_PROFILE would"}},"web":{"summary":"Serve the editor in a browser, on this machine only. With a folder it opens that project; without one it starts on a welcome page where you choose the project in the browser. A key in the link keeps other pages and other users out, and nothing is sent anywhere.","licence":"Free. What needs Pro in an IDE needs it here too.","options":{"port":"the port to listen on, 8765 by default; the next free one is used when it is busy","host":"the address to listen on, 127.0.0.1 by default; any other makes the folder reachable from the network","noOpen":"print the link and do not open a browser"},"exits":{"0":"0 the server was stopped with Ctrl-C","1":"1 the folder is not there, the port or address is not usable, or no port was free","2":"2 the CLI itself failed, not the command; the message says what"}},"agentServe":{"summary":"Serve the AI chat of one project to the IDEs and editors that show it: its chats, their history and the agent behind them, over HTTP on 127.0.0.1 and nothing else. Every window of the project shares this one server. It prints one line of JSON with the port and a key, wants the key as a Bearer token on every request, and leaves a few seconds after no window is attached to it and no turn is running.","licence":"Free to start. Sending a message needs Pro on a developer machine, and Team in a pipeline.","options":{"project":"the project folder the chats belong to","detach":"start the server in its own session, print its line once it answers, and return; an IDE starts it this way so that a signal to its terminal does not stop the server for every window"},"exits":{"0":"0 stopped by a signal, or left a few seconds after no window was attached to it and no turn was running; a second server for a project that already has one waits until its standard input closes","1":"1 no project was given, the folder is not there, or the server could not listen","2":"2 the CLI itself failed, not the command; the message says what"}},"agent":{"summary":"Start an AI agent's own command line in this terminal with the penstock MCP server already set up for this one run. Nothing is written to the agent's own configuration or to the project. What follows -- goes to the agent as it is. Without a name it lists the agents and which are installed. An agent you added in the settings is started with its own command and arguments.","licence":"Free. The tools the agent gets keep their own licence: see penstock mcp --help.","options":{"project":"the project the penstock tools work on, and the folder the agent starts in; the current project by default"},"exits":{"0":"0 the agent ended normally, or the list was printed","1":"1 the agent is not installed or not known, or could not be started; any other code is the agent's own","2":"2 the CLI itself failed, not the command; the message says what"}},"testTask":{"summary":"Run one element of a diagram on the engine the project names. The process is deployed as a test build, an instance is started with the variables, the path to the element is completed or mocked, and the element is completed, made to throw an error or left waiting. Its variables, incidents and state are printed, and the build is removed afterwards.","licence":"Running a process against an engine is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"element":"the element to test","variables":"variables the instance starts with, over the ones the path needs","variablesFile":"the same variables, read from a JSON file","complete":"complete the element with these variables, which is the default with none","error":"make the element throw this BPMN error instead of completing","hold":"leave the element waiting, to see what it received","id":"which process, when the file holds more than one","timeout":"how long one step may take, 30 by default"}},"connections":{"summary":"Show the configuration around the diagrams: every secret and MCP client a diagram names, where the project defines it (connector-secrets, .env, Docker Compose, Helm values, Spring Boot properties, mcp-gateway.yaml), and what is missing, with the Camunda 8.7 property names that 8.8 renamed. Only names are printed, never values.","licence":"Free. With --against it is part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline","env":"look at one environment: the shared files and its own (.env.<name>, values-<name>.yaml, application-<name>.yaml, a profile of penstock.yaml)","against":"with --env: list what the other environment defines and this one lacks, before a deploy"},"exits":{"0":"0 nothing the runtime would fail on was found","1":"1 a diagram names something that is missing, an environment is unknown, or --against is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"incidentScenario":{"summary":"Read an incident of the engine (by its key, or the key of its instance) and write the scenario that reproduces it: it starts the process with the instance's variables, with anything that looks secret replaced by a placeholder, drives the path the instance took, and ends on an incident of the same type at the same element. The answer is the scenario, what it could not take from the engine, and with --run whether it reproduced.","licence":"Reading the incident and previewing the scenario is Free. With --write or --run it is part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline","write":"save the scenario next to the diagram's other scenarios; without it the answer is only what would be written","run":"run the scenario on the engine of the project and say whether it reproduced the incident; the engine has to be marked for tests"},"exits":{"0":"0 the incident was read and the scenario made, and with --run it reproduced","1":"1 the incident or its diagram could not be found, the file could not be written, the scenario did not reproduce it, or --write or --run is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"agents":{"summary":"List the Camunda 8 AI agents of the project: the model and provider, the limits and memory, each tool with the parameters the model fills in, the MCP clients the agent uses and whether their configuration is found, and what the agents rules found. Only names are printed, never values.","licence":"Free.","exits":{"0":"0 no agent has an error","1":"1 an agent has an error, or the folder does not exist","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the answer is printed; json is for a pipeline","agent":"make the scenario for this agent only","write":"save the scenarios next to the diagram's other scenarios; without it the answer is only what would be written"}},"agentsScenario":{"summary":"Make a scenario for the AI agents of a process, with the model answer stubbed: the agent job is completed with a canned answer and the scenario asserts that the agent completes and that no tool is run. For an agent sub-process it writes the COMPLETE_JOB_AD_HOC_SUB_PROCESS step that activates a tool, which Camunda Process Test runs and the Penstock runner does not. Without --write it only says what would be written.","licence":"Previewing the scenario is Free. With --write it is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the scenarios were made","1":"1 the diagram has no agent, cannot be read, the file could not be written, or --write is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the answer is printed; json is for a pipeline","agent":"make the scenario for this agent only","write":"save the scenarios next to the diagram's other scenarios; without it the answer is only what would be written"}},"migrateAgents":{"exits":{"2":"2 the CLI itself failed, not the command; the message says what","0":"0 the migration was previewed or written","1":"1 nothing was written because a file changed or could not be replaced"},"summary":"Move the AI agent elements of the diagrams from the template versions of Camunda 8.9 and earlier to the 8.10 agent task and agent sub-process templates, using the migration rules the new templates declare. An element whose mapping cannot be proven is left untouched and listed with the reason. Without --write it prints what would change and writes nothing; files are replaced atomically and a symbolic link is never followed out of the project.","licence":"Writing is part of Penstock Pro, and Team in a pipeline. The first 3 elements of the preview, and penstock agents, are free.","options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is"}},"receiptVerify":{"summary":"Check a change to diagrams, decisions or forms without an agent: the files that changed against a git ref (HEAD unless --against), a diff in the diagram's own terms, the check before and after with the new findings named, and the saved scenarios run on the changed processes. The answer is a verdict: verified, has new findings, or not verified and why. Secret values and file contents are never put in it, only names, hashes and ids.","licence":"The verdict and the counts are Free. The full receipt, and --write, are part of Penstock Pro, and Team in a pipeline.","options":{"against":"the version to compare with; HEAD by default","write":"keep the receipt as a file in .penstock/receipts; without it nothing is written unless ai.verify.keepReceipts is true","format":"how the answer is printed; json is for a pipeline","runScenarios":"run the saved scenarios even when the change adds content that runs or touches the project configuration; without it they are not run then, because that content would be deployed to the test engine"},"exits":{"0":"0 the change is verified","1":"1 the change has new findings or could not be verified, a file could not be found, or --write is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"receiptCheck":{"summary":"Check a stored receipt against the files it names: the receipt must be a Penstock receipt, and each file must still hash to what the receipt recorded. It does not run the check again.","licence":"Stored receipts are part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the receipt is valid and every file matches it","1":"1 the receipt is not a receipt or cannot be found, or a file changed, is missing or should not exist","2":"2 the CLI itself failed, not the command; the message says what"}},"testDmn":{"summary":"Run the saved test cases of the decision tables in DMN files: each case gives the decision its inputs, compares the outputs with the expected ones and names the rules that matched. Cases live next to the file as <name>.dmn.tests.json. The rule coverage lists the rules no case reaches, counted for the hit policy of the table.","licence":"Running up to 3 cases per decision is Free. More cases, junit output, --min-rule-coverage and any run in a pipeline are part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed: text, json, or junit for a pipeline","minRuleCoverage":"fail when the rule coverage of the decision tables is below this percentage, from 0 to 100"},"exits":{"0":"0 every case passed and the coverage, when one was asked for, is met","1":"1 a case failed or could not be evaluated, a file could not be read, the coverage is below the minimum, or the run is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"migratePlan":{"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"},"exits":{"2":"2 the CLI itself failed, not the command; the message says what","0":"0 the plan was listed","1":"1 the selection names an id that is not in the plan, or a file could not be read"},"summary":"List every change the conversion would make, per file and per element, with a stable id, the class it falls in (converted automatically, converted with a changed meaning, needs a person, left as is), the reason and an effort estimate. Writes nothing, except the selection when you ask for --save-selection.","licence":"Free."},"migrateVerify":{"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"},"exits":{"2":"2 something cannot be compared, or nothing was run because of a refusal","0":"0 every scenario is equivalent","1":"1 at least one scenario differs"},"summary":"Run the same scenarios on the original Camunda 7 diagram on one engine and on the converted Camunda 8 diagram on another, and say for each whether the observable trace, final state, variables and incidents are equivalent, differ (with the first point of divergence) or cannot be compared. Both engines must be marked deployment.forTests; shared and production engines are refused, and so is a conversion that adds executable content unless you confirm it with --run-unreviewed. Secret values are never copied into the answer.","licence":"Running is part of Penstock Pro, and Team in a pipeline. The first 3 scenarios are free."},"policy":{"summary":"Keep the rules, severities, conventions, palette, element templates and baselines of a team in one folder in git (.penstock/policy, or the folder policy: names in penstock.yaml, or a git address fetched only by sync), pinned by a hash of every file in it. show says what is active; init starts a pack; add-rule sets a rule and whether it is forced; pin writes the hash into penstock.yaml (or penstock.policy.lock); verify recomputes it; sync fetches policy: source into .penstock/policy-source, and nothing is fetched otherwise. A pack is data only: a plugin or a script in it is refused. penstock check then fails in a pipeline when the pin does not match, a forced rule is turned off or lowered, the palette is wider than the pack allows, or a required check did not run.","licence":"Reading and showing a pack is Free. Creating or changing one with init, add-rule, pin, verify and sync is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the pack was shown, written or verified","1":"1 the pack is missing, refused or does not match its pin, or the command is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how show prints the answer; json is for a pipeline","project":"the project the pack belongs to; the current folder by default","name":"with init: the name of the policy","severity":"with add-rule: error, warn or off","forced":"with add-rule: the project may not turn the rule off or lower it","source":"with sync: fetch this address instead of policy: source; an address you type here may also be a local folder","allowLocalSource":"with sync: accept a local folder named by policy: source in penstock.yaml; a network share is never accepted"}},"drift":{"summary":"Compare the processes and decisions in the project with what an environment of penstock.yaml has deployed: per resource in sync, local ahead, engine ahead (someone changed the engine and your file has not changed since the last deploy), differs (changed on both sides, or there is no deploy record to tell which), only local, or only on the engine. The content is compared after the same normalisation on both sides (whitespace, attribute order and the order of incoming and outgoing references do not count). The environment is a profile of penstock.yaml, or default. Forms are not read from an engine and are not compared. Names and hashes only, never a credential.","licence":"Free for one environment. With --against it is part of Penstock Pro, and Team in a pipeline.","options":{"env":"the environment to read; the one deploy would use by default","against":"also read this environment and compare the two with each other","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 everything is in sync","1":"1 something is not in sync, or two environments differ","2":"2 an environment could not be read: unknown, not set up, unreachable or credentials refused, or the CLI itself failed; the message says what"}},"promote":{"summary":"Take what is deployed and verified on one environment to another: the resources whose content on --from is exactly the local file, nothing else. The plan lists what would be created or updated, the secrets and MCP clients the target lacks (names only), whether the files fit the target engine version and its element templates, and the policy pack status. It is a dry run unless --write is given, and --write deploys only to an environment declared in penstock.yaml, to its own address. A target marked deployment.protected: true needs --confirm <its name>, and in a pipeline also --approve-file, an approval record (JSON: the environment, the hash of each file, approvedBy, approvedAt, validUntil) that is checked for all of that; it is a record kept in git and is not a signature or a cryptographic proof, so protect the folder that holds it. Policy enforcement and approvals in a pipeline are part of the Team plan.","licence":"Promoting, a dry run included, is part of Penstock Pro, and Team in a pipeline.","options":{"from":"the environment whose deployed content is promoted","to":"the environment to deploy to","dryRun":"plan only; this is the default","write":"deploy after the plan is clean","confirm":"the name of a protected target, typed again","approveFile":"in a pipeline, the approval record for a protected target","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the plan is clean, or the deployment was taken","1":"1 something blocks the promotion, and the answer says what","2":"2 an environment is unknown, not set up or could not be read, or the CLI itself failed; the message says what"}},"evidenceBuild":{"summary":"Assemble one reviewable package of the project for an audit: the diagrams as SVG, the Check results (SARIF and readable), the recorded scenario and DMN test results with coverage, the AI receipts (names and hashes only), with --since the changes since a git ref in diagram terms with the pictures, the connections findings (names only), the migration report if the project has one, and a file list with SHA-256, the tool version and the git commit and author. With the Team plan it also holds the policy pack identity and pin status and the declared environments. It never holds a secret value and never reads a file outside the project. evidence.json lists every file, and evidence.sha256 is the SHA-256 of evidence.json: an integrity checksum that shows the pack was changed afterwards, not a signature and not a legal attestation. A pack is a zip by default, or a folder with --format dir; an existing one is never replaced without --force.","licence":"Building a pack is part of Penstock Pro, and Team in a pipeline; the policy and environments sections are part of the Team plan. Verifying is Free.","options":{"out":"where the pack is written; a file name ending in .zip, or the folder of the pack; by default under .penstock of the project","format":"zip (the default) or dir for the container; json prints the answer as JSON","since":"add what changed since this ref, drawn in diagram terms","force":"replace a pack that is already there"},"exits":{"0":"0 the pack was written and verified","1":"1 the pack was refused (a limit, a diagram that cannot be drawn, a file that cannot be inspected, an existing pack) or the licence does not allow it; the message says why","2":"2 the CLI itself failed, not the command; the message says what"}},"evidenceVerify":{"summary":"Recompute the SHA-256 of every file of an evidence pack, a zip or a folder, and say which file was changed, is missing or was added since it was built. It refuses an entry that climbs out of the pack, an absolute path and a link, and it reads nothing outside the pack. The seal is an integrity checksum, not a signature: someone who can rewrite the whole pack can also write a new seal, so keep the pack where it cannot be rewritten.","licence":"Free.","options":{"format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 every file matches the manifest and the seal matches the manifest","1":"1 the pack was changed, is incomplete or cannot be read; the message says what","2":"2 the CLI itself failed, not the command; the message says what"}},"refactor":{"summary":"Rename a process variable, message, signal, error code, escalation, job type, topic, decision id, form key or process id (the called element of a call activity) across the BPMN, DMN and form files, the element templates, the application yaml and properties, the test cases and the code, and show every edit with its file, line and before and after, together with the places it refuses to touch and why (a script, a computed name, an expression it cannot read, a file it may not edit). It only previews unless --apply is given, and it writes nothing at all when anything is wrong: every file is written whole and atomically, only when it still reads as it did in the preview, and a failed write puts the files back. It refuses when the git tree has uncommitted changes, unless --force. A preview that lists refused places that matter needs --acknowledge to apply. bulk applies the renames of a mapping file in order, each on the result of the one before: a JSON file with a renames list of kind, from and to, or lines of kind,old,new. extract moves a subprocess, or a group of elements with one way in and one way out, into a new process file next to the diagram and replaces it with a call activity wired through variable mappings; it refuses with the reason when the selection has several entries or exits, a variable it cannot map, or anything that would not stay valid.","licence":"A single rename, with its preview, is Free, with no time limit. bulk and extract are part of Penstock Pro, and Team in a pipeline.","options":{"apply":"write the changes; without it only the preview is printed","force":"apply although the git tree has uncommitted changes","acknowledge":"apply although the preview lists places it refuses to touch, which stay as they are","name":"with extract: the name of the new process and of the call activity","project":"the project folder, the current folder by default","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the preview was printed, or the changes were written","1":"1 the plan is blocked or refused (the message says why), the git tree is not clean, a file changed since the preview, or the licence does not allow it","2":"2 the CLI itself failed, not the command; the message says what"}},"lsp":{"summary":"Run a language server for BPMN, DMN, CMMN and Camunda Form files, so any editor that speaks the Language Server Protocol shows the check findings where they are, with hover, go to definition, references, symbols, quick fixes and completion. Free; it speaks over stdin and stdout only.","licence":"Free.","exits":{"0":"0 the editor shut the server down and asked it to exit","1":"1 the editor closed the connection first, or the command was started in a terminal or with a transport other than stdio","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"stdio":"speak over stdin and stdout, the only transport there is; the editor starts the command and this is what it passes"}}},"usage":{"init":"write a penstock.yaml for this project; --engine camunda-8|camunda-7|operaton|cib-seven|flowable|activiti|classic says what it runs on\\n(asked in a terminal when the folder is empty); --ci and --hooks add the rest;\\n--example camunda-8|camunda-7|operaton|cib-seven|flowable|activiti writes a small runnable project into an empty folder","doctor":"check the setup: configuration layers, profiles, rules, templates, engine; --format json prints the configuration","check":"everything wrong with the diagrams, in sections: the drawing, the bpmnlint rules and,\\non Pro, how the processes, decisions and forms run; --only drawing,rules,flow for part of it","migrate":"Camunda 7 to Camunda 8: what does not carry over, the converted files, a report to hand on;\\nconvert needs Pro, and Team in a pipeline: it writes the Camunda 8 files into camunda-8 next to the folder, with a\\npenstock.yaml of their own, and touches nothing else; --target 8.5..8.9, --dry-run, --out <dir> for another folder\\napply rewrites the Camunda 7 files in place, as a diff first and with --write on Pro; --workers spring|java|node|python\\nplan lists every change with a stable id, class and reason; apply takes --only, --exclude and --saved to write just the accepted ones\\nverify runs the scenarios on a Camunda 7 and a Camunda 8 test engine and compares them (Pro)","code":"check the diagrams against the code: job types, topics, classes and beans with nothing to run them, workers no diagram uses","facts":"the worker contracts of the files on standard input, as JSON, for Python, Go, C# and Scala","templatesGenerate":"write an element template for every job worker the project has, into .camunda/element-templates;\\n--check writes nothing and exits 1 when a template's variables no longer match the worker\\nwith an OpenAPI, Swagger or Postman file instead of a folder, one REST connector template per operation:\\nprinted first, written with --write","scenariosList":"list every distinct way through each process, with the conditions it takes: a test plan; --format md|json","scenariosRun":"run the Camunda test-case files of the diagrams against their engine, step by step, with mocks;\\n--junit writes a Camunda Process Test class that runs them","scenariosGenerate":"write the test-case files from the ways through each process","testCases":"the command behind scenarios run and scenarios generate; --generate writes the test-case files instead of running them","junit":"write a JUnit test for every way through each process; --out <dir>, --package <name>","layout":"lay the diagrams out; --write to save","fmt":"rewrite the XML the way the editor saves it, so diffs stay readable","convert":"write the converted diagrams in the Operaton namespace, from Camunda 7 or CIB seven","diffTwoFiles":"what changed between two versions of a process","diffWorkingTree":"what the working tree changed since a commit, branch or tag, HEAD~1 by default; --images to see it","export":"render the diagrams as pictures; --format svg|png, --out <dir>","share":"one HTML file to send: a read-only viewer with zoom, pan and the documentation of each element, opens offline; -o <file.html>","import":"turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN 2.0, and list what could not be mapped; --from, --to, --report, -o <file.bpmn>, --force","docs":"write documentation for every process, decision file and form; --format html|md|docx|pdf, --out <dir>","report":"one markdown comment for a pull request: check, diff and pictures","bot":"answer in a pull or merge request, from the CI run it is in; init --ci sets it up","deploy":"deploy processes, decisions and forms to the engine the configuration names; --dry-run, --wait","show":"list a diagram's elements, flows and properties; --format json for tools","edit":"add, connect, set or remove, the way the editor would; --ops for JSON on one line,\\n--ops-file for JSON in a file or - to read it from standard input, --schema for the contract","license":"which licence this machine has, or - with the e-mail you bought with - the key for PENSTOCK_LICENSE in a pipeline","trust":"let this project's penstock.yaml run shell commands here: needed before a hook of check, layout or deploy runs;\\n--list prints what is trusted, --forget takes one away, --yes does not ask","licenseBuy":"buy Penstock; the licence arrives on this machine by itself","licenseLogin":"sign in with the e-mail you bought Penstock with; no key to copy","licenseActivate":"use a key you already have","licenseLogout":"release this machine's licence so another machine can use it (the same as license deactivate)","mcp":"serve BPMN diagrams to an AI agent over MCP: reading and checking are free;\\nflow analysis, scenarios, code links and editing need Pro, and Team in a pipeline;\\n--config prints the client entry","connectors":"list Camunda's connector templates, or print one; downloaded from GitHub at most once a day","update":"move the project's wrapper to a version, the latest by default","profile":"use this profile, as PENSTOCK_PROFILE would","lang":"answer in this language, en, ru, de, zh, ja, ko, es, pt-BR, fr, it, pl, nl, tr, uk, zh-TW, cs, id or vi;\\notherwise LANG, then LC_MESSAGES, then LC_ALL decide, and English is the answer","refresh":"with connectors: check GitHub for a newer release now","format":"how check, scenarios list, show and docs report themselves","only":"which parts of check to run: drawing, rules, flow","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","write":"let layout or fmt save its result","force":"let import replace a file that is already there","dryRun":"let deploy say what it would send, and send nothing","wait":"let deploy confirm with the engine that the definitions are live","ci":"which pipeline init should write","out":"where export puts pictures, or where report writes its markdown; -o is the same, and for share the file","base":"what report compares against; defaults to origin/main","imageBase":"where the pictures will be served from, for a comment that shows them","imagesLink":"where to find them instead, when they cannot be shown inline","images":"let diff render before and after, with the changes coloured","imagesDir":"where report puts its pictures","distribution":"for update: where to get Penstock from, a tarball or a registry spec","stage":"for bot: draw now and post later, when the pictures are uploaded between","target":"for migrate: the Camunda 8 version to convert for, 8.8 by default","failOn":"for migrate: what makes the exit code 1, error by default","verbose":"for migrate: list and annotate what only carries over as it is","hooks":"install a pre-commit hook that formats and checks staged diagrams","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","teamcity":"let scenarios run report as TeamCity service messages, as the IDE reads them","junitXml":"where scenarios run writes a JUnit XML report","timeout":"how long scenarios run waits for one step, 30 by default","optionsHeading":"Options","pathsNote":"Paths default to the working directory, and the configuration is read from there upward, so it\\ndoes not matter which folder you run it in.","helpNote":"Every command and subcommand has its own help, with its options, an example, which tier it is and\\nwhat its exit codes mean: penstock <command> --help, as in penstock check --help or\\npenstock scenarios run --help.","guideNote":"The guide: {url}","web":"serve the editor in a browser, for the folder you give or for one you choose on its welcome page; --port, --host and --no-open say where and whether a browser opens","port":"the port penstock web listens on, 8765 by default; the next free one is used when it is busy","host":"the address penstock web listens on, 127.0.0.1 by default; any other makes the folder reachable from the network","noOpen":"penstock web: print the link and do not open a browser","agentServe":"serve the AI chat of one project to an IDE over HTTP on this machine; --project says which","agentLaunch":"start an agent's own command line here with the penstock MCP server set up for this run; without a name, list the agents","testTask":"run one task of a diagram on an engine: the path before it is completed or mocked, then its variables, incidents and state are reported","connections":"show the secrets and MCP clients the diagrams name, where the project defines them\\nand what is missing, with the 8.7 property names that 8.8 renamed;\\n--env looks at one environment, --env with --against compares two","env":"for connections: look at one environment, the shared files and the ones named for it","against":"for connections --env: what another environment defines and this one lacks (Pro)","incidentScenario":"turn an incident into a scenario that reproduces it;\\n--write saves it, --run runs it on the engine","agents":"list the AI agents: model, tools, limits, MCP clients, and what is wrong","agentsScenario":"make a scenario for an AI agent, with the model stubbed; --write on Pro","receiptVerify":"verify a change: new problems,\\nscenarios, a verdict","receiptCheck":"check a stored receipt\\nagainst the files","testDmn":"run the saved test cases of the decision tables in a DMN file or folder and report which rules they cover","policy":"keep your team’s rules, conventions, palette, templates and baselines in a pinned folder in git;\\nshow, init, add-rule, pin, verify, sync","drift":"Compare the project with what an environment has deployed.","promote":"Take what is verified on one environment to another, as a dry run unless --write.","evidenceBuild":"Build one reviewable audit package.","evidenceVerify":"Check that an evidence pack is unchanged.","lsp":"language server for editors over stdio: findings, hover, definitions, symbols, quick fixes and completion"},"renamed":"penstock {old} is now {now}; the old name goes in the next release.","flagRenamed":"{old} is now {now}; the old flag goes in the next release.","scenariosUsage":"Use scenarios list, scenarios run or scenarios generate.","mcpConfigHint":"Paste into your MCP client configuration, or in Claude Code run, once the command line is installed (npm install -g @kern0x1b/penstock-cli): claude mcp add penstock -- penstock mcp. VS Code needs neither, the Penstock extension registers the server. It finds the project from the files the agent asks about.","mcp":{"partOf":"{description} Part of Penstock Pro, and Team in a pipeline: {gives}.","nothing":"nothing","takesNot":"{tool} takes {list}, not {extra}","rootsNotSaid":"The client did not tell which folders are open, so no file can be placed inside them. Open a folder in the client and try again.","truncated":"The result was cut at {shown} of {total} characters. Ask for less: one process, or a smaller diagram.","needs":"{tool} needs {list}","mustBeTrueOrFalse":"{tool}: {name} must be true or false","noDirectory":"there is no directory {target}","notADirectory":"{target} is not a directory","projectMustBeAbsolute":"\\"project\\" must be an absolute path to a project folder","projectNotGiven":"\\"project\\" must be provided as an absolute path to a project folder","fileMustBeAbsolute":"\\"file\\" must be an absolute path to a diagram","noFile":"there is no file {file}","noElement":"{file} has no element {id}. It has {ids}.","notABpmnDiagram":"{file} is not a BPMN diagram","outsideRoots":"{target} is outside the workspace roots","notAPenstockProject":"{target} is not a Penstock project","notADiagram":"{file} is not a BPMN, DMN or form file","badRevision":"{ref} is not a git revision that can be used here","noCommittedVersion":"{file} has no committed version at {ref}, so there is nothing to compare it with","wouldReflow":"would reflow layout (dryRun, nothing written)","imageTooLarge":"The drawing is {size} characters long, too long to return here. Pass out, a folder, to write it there instead.","pngReturned":"{file} drawn as a PNG image.","onlyOneOf":"{tool} takes {first} or {second}, not both","mustBeOneOf":"{tool}: {name} must be one of {list}","mustBePositive":"{tool}: {name} must be a whole number above zero","outMustBeAbsolute":"\\"out\\" must be an absolute path to a folder","instructions":"Tools for BPMN diagrams, DMN decisions and Camunda forms across projects. Pass absolute paths to files or project folders. Read a diagram with show_diagram before changing it with edit_diagram. A tool that changes files also returns a receipt: what changed, the new problems and the scenarios that ran. If it lists new errors, fix them and call again.","unknownTool":"unknown tool: {name}","unknownPrompt":"unknown prompt: {name}","methodNotFound":"method not found: {method}","parseError":"parse error","notARequest":"that is not a JSON-RPC request: one request object per line, no arrays","tool":{"migrateApply":"Apply the Camunda 7 to Camunda 8 migration to a project: rewrite BPMN, DMN and forms in place, translate the expressions it can and list the ones it cannot, write a job worker skeleton for each job type and MIGRATION.md, then check the result as Camunda 8. By default it is a dry run that returns the diff and writes nothing; pass write true to write. It never deletes a file and never follows a symbolic link out of the project.","listDiagrams":"List the BPMN diagrams in a project, returning absolute paths.","showDiagram":"Describe a diagram: every element and flow with its id, type, name, connections and engine properties. Read this before editing; operations refer to these ids.","elementContext":"Say what surrounds one element of a diagram, as the editor's suggestions see it: the variables that reach it and which element writes each, what the element itself reads and writes, its job types, and the job types, processes and decisions the project already uses. Read it before naming a variable, a job type or a mapping, so that an existing name is reused instead of a new one invented. It is worked out from the diagrams alone, not from the code behind them.","checkDiagram":"Report what is wrong with a diagram, as the editor's check does: the drawing, the project's bpmnlint rules and, with a licence, how the process runs.","analyzeFlow":"Find what is wrong with how a diagram runs: deadlocks, branches that run twice, elements that can never run and loops with no way out, each with the path of element ids that leads there. Run it after edit_diagram.","listScenarios":"List every distinct way through a diagram: the decisions each takes, their conditions, the steps it runs and where it ends. Use it to write tests or to explain the process.","checkCodeLinks":"Check every diagram in the project against the code: job types, external task topics, classes and beans with nothing to run them, called processes no diagram defines, and workers no diagram uses, with file and line.","listDiagramsMore":"Each entry has the file and its kind (process, decision or form): DMN decision files and Camunda forms are listed too.","showDiagramMore":"For a DMN file it gives each decision with its hit policy, inputs, outputs, rules and the decisions, input data and knowledge it requires; for a Camunda form, its components with type, key and label.","elementContextMore":"For a DMN file the element is a decision id, and the answer is its table, the decisions that need it and the process elements that call it; for a form it is a component key or id, with the process elements that open the form.","checkDiagramMore":"A DMN file or a form is checked too: a DMN file that cannot be read and the form checks (duplicate or missing keys, repeated options) are free; gaps and overlaps between the rules of a decision table need a licence.","searchElements":"Find where a name is used across the project: elements, processes, messages, decisions and their outputs, variables with the elements that write and read them, and form fields. It matches the id or the name, ignoring case, exact matches first. Use it before inventing a name, and to see what a rename would touch.","diffDiagrams":"Say what changed between two diagrams of the same kind (BPMN, DMN or form), or between a file and its committed version (HEAD, unless ref names another): the elements added, removed and changed, and the ids of the elements that only moved on the canvas (or, in a form, were reordered or moved to another group). A decision table changes by rule id, a form by component id.","exportImage":"Draw a BPMN diagram as SVG (returned as text) or PNG (returned as an image; needs puppeteer installed). Pass out, a folder, to write the file there instead of returning it.","layoutDiagram":"Run the editor's auto layout on a diagram and write the result back in one atomic step. The elements and flows stay the same; only their positions change. Use dryRun to see which elements would move without writing.","runScenarios":"Run the project's saved test cases against a local Camunda engine that is marked for tests, and return which passed, failed or were skipped. Give a diagram as file, or a project folder. Each run deploys its own copy of the diagrams to the engine, removes it afterwards and keeps the trace under .penstock/runs.","editDiagram":"Change a diagram through the editor's own modelling: new elements are placed and connected the way the editor does it, and ids follow the project's conventions. The operations apply together or not at all. An edit that would break the drawing (overlapping shapes, a flow through a shape, a detached flow) is refused; crossings and the like are reported but allowed. Use dryRun to see the result without writing.","migrateAnalyze":"Analyse what moving Camunda 7 diagrams, decisions and forms to Camunda 8 would take, as penstock migrate does: for each file its status and findings (rule, severity, where, what to do, whether the conversion is automatic, to review or manual), then the effort and the blockers. Give a file or a project folder. Nothing is written.","createDiagram":"Create a new BPMN diagram, DMN decision or Camunda form at a path that does not exist yet, in one atomic step; an existing file is never overwritten. The extension (.bpmn, .dmn, .form) says which. Without spec the file is empty. With spec it is built from a description of its content and checked before it is written: a file that fails the check with an error is refused. BPMN: spec has steps (elements in a line after the start event, each with element, name and optionally event, id and properties) or operations (as in edit_diagram). DMN: spec has hitPolicy, inputs (label, expression, typeRef), outputs (name, label, typeRef) and rules (when and then, one text for each input and output). Form: spec has fields (type, key, label, options, required).","testTask":"Run one element of a diagram on the local Camunda engine the project marks for tests: the process is deployed as a test build, an instance is started with the variables, the path to the element is completed or mocked, then the element is completed, made to throw a BPMN error or left waiting. Returns the element's state, what it received and sent, the variables, the incidents and the instance state, and removes the build afterwards.","generateTemplates":"Make one REST connector element template per operation from an OpenAPI 3, Swagger 2.0 or Postman collection file: typed inputs from the parameters and request body, authentication from the security schemes as secrets placeholders, a result expression and error handling. Writes nothing unless write is true; the answer lists every template and whether it would be created or replaced. Writing never leaves the project or follows a symbolic link.","connections":"Show the secrets and MCP clients the diagrams and element templates of a project name, where the project's own files define them (connector-secrets, .env, Docker Compose, Helm values, Spring Boot properties, MCP client configuration), what is missing, and the Camunda 8.7 property names that 8.8 renamed. Reads only; the answer holds names and places, never values. With environment it looks at one environment; with against it also lists what the other environment defines and this one lacks, which is a Pro feature.","incidentToScenario":"Turn an incident of the project's engine into a scenario that reproduces it. Give the key of the incident or of its instance. The scenario starts the process with the instance's variables (anything that looks secret is replaced by a placeholder, and the names are listed), drives the path the instance took and ends on an incident of the same type at the same element. Reading and previewing is free and writes nothing. With write it saves the scenario next to the diagram's other scenarios; with run it also runs it on the engine of the project, which has to be marked for tests, and says whether it reproduced the incident; both are Pro. Writing never leaves the project or follows a symbolic link.","agents":"List the Camunda 8 AI agents of a project: for each, the model and provider, the prompts, the tools with the parameters the model fills in (fromAi), the limits, the memory, the MCP clients it uses with whether their configuration is found, the tool filters, and what the agents rules found. Only names are returned, never secret values.","migrateAgents":"Move the AI agent elements of a project from the Camunda 8.9 and earlier template versions to the 8.10 agent task and agent sub-process templates, using the migration rules the new templates declare. An element whose mapping cannot be proven is left untouched and listed with the reason. By default it is a dry run that previews the first 3 elements and writes nothing; pass write true to write, which is part of Penstock Pro. Files are replaced atomically and a symbolic link is never followed out of the project.","testDmn":"Run the saved test cases of the decision tables in a DMN file, or in every DMN file of the project: each case's inputs go to the decision, the outputs are compared with the expected ones, and the rules that matched are named. The answer also lists the rules no case covers, counted for each table's hit policy. Up to 3 cases per decision run for free; more are part of Penstock Pro. With case, the tool saves a new case next to the file (Penstock Pro), which changes a file.","migrateVerify":"Run the project’s scenarios against the original Camunda 7 diagram on one test engine and the converted Camunda 8 diagram on another, and report per scenario whether the observable behaviour is equivalent, differs or cannot be compared. Both engines must be marked for tests; it refuses anything else, and refuses when the conversion adds executable content. Runs locally, never sends anything elsewhere. Part of Penstock Pro.","drift":"Compare the project's diagrams and decisions with what an environment has deployed, after the same normalisation, and say per resource whether it is in sync, ahead locally, ahead on the engine, only local, only on the engine, or changed on both sides. Reads only: nothing is deployed or written, and only environments penstock.yaml declares are asked. With against it also compares two environments with each other, which is a Pro feature.","evidenceBuild":"Build an audit evidence pack of the project: the diagrams as SVG, the Check results, the recorded test results, the AI receipts (names and hashes only), what changed since a git ref, and a manifest with the SHA-256 of every file. It writes a zip or a folder inside the project and never holds a secret value. The seal is an integrity checksum, not a signature. Writes a file, so it needs Pro (Team in a pipeline).","importDiagram":"Import a diagram from another tool as BPMN 2.0: a draw.io, Visio, Signavio, Bizagi or Flowable file, or with from=modeler a Camunda Modeler project folder (a report of its templates, lint rules, settings, plugins and keymap). By default it only previews: it returns what was converted, kept and could not be mapped, and writes nothing. It writes only with write=true, a new file inside the project; an existing file is never replaced without force. Nothing in the imported file is ever run.","refactorRename":"Preview or apply the rename of a process variable, message, signal, error code, escalation, job type, topic, decision id, form key or process id across the BPMN, DMN, forms, element templates, configuration, tests and code of the project. Without apply it only returns the plan: every edit, and every place it refuses to touch with the reason. Applying needs the planId of that preview and refuses when the git tree has uncommitted changes unless force is true.","refactorBulk":"Preview or apply the renames of a mapping file in order, with the same plan, refusals and limits as refactor_rename.","refactorExtract":"Preview or apply moving a subprocess, or elements with one way in and one way out, into a new process file and replacing them with a call activity wired through variable mappings. It refuses, with the reason, when the selection is not safe to move."},"prompt":{"reviewDiagram":{"description":"Review a diagram: run the checks, read how it runs and report what to fix, most serious first.","text":"Review the diagram {file}. Read it with show_diagram, run check_diagram, and for a BPMN diagram analyze_flow too. Then list what is wrong, most serious first, each with the element ids involved and the change you suggest. Do not edit anything until I agree."},"explainProcess":{"description":"Explain a process in plain language for someone who has not seen it.","text":"Explain the process {file} in plain language for someone who has not seen it. Read it with show_diagram and list_scenarios, name the main path and each decision with what makes it go one way or the other, and say where it can end. Use the names on the diagram, and give element ids only when I ask."}},"param":{"workers":"Job worker skeleton language: spring (default), java, node or python.","write":"Write the changes. Default false: a dry run that returns the diff and writes nothing.","file":"Absolute path to the BPMN diagram.","project":"Absolute path to the project directory. When omitted, uses the workspace roots provided by the client.","anyFile":"Absolute path to a BPMN, DMN or Camunda form file.","query":"Text to look for in ids and names.","kinds":"Only look for these kinds. When omitted, all of them.","limit":"Most results to return. Default 50.","other":"Absolute path to the second BPMN diagram. When omitted, the diagram is compared with its committed version.","ref":"Git revision to compare with when other is omitted. Default HEAD.","format":"svg (default) or png.","out":"Absolute path to a folder to write the image to. When omitted, the image is returned.","timeout":"Seconds one step of a test case may take before it fails.","dryRun":"Report what would change without writing the file.","element":"Id of the element to test.","variables":"Variables the instance starts with. They win over the values the path needs.","complete":"Variables to complete the element with. This is the default, with none.","error":"BPMN error code the element throws instead of completing.","target":"Camunda 8 version to analyse for. Default 8.8.","verbose":"Include the findings that only note what carries over.","newFile":"Absolute path of the file to create, ending in .bpmn, .dmn or .form. It must not exist.","diagramName":"Name of the process, decision or form. Default: the file name.","diagramDescription":"What the process or decision is for, stored as its documentation. Not available for forms.","spec":"The content to build, as the tool description says.","hold":"Leave the element waiting, to see what it received.","process":"Id of the process, when the file holds more than one.","apiSpec":"The absolute path of the API description file: OpenAPI 3 or Swagger 2.0 in JSON or YAML, or a Postman collection in JSON.","templatesOut":"The absolute path of the folder to write the templates into. By default .camunda/element-templates of the project. It has to be inside the project.","environment":"Look at one environment: the shared files and the ones named for it (.env.<name>, values-<name>.yaml, application-<name>.yaml, a profile of penstock.yaml).","against":"With environment: the environment to compare with. Lists what it defines and the environment lacks. Pro, and Team in a pipeline.","secretPrefix":"The namespace of the secret names the templates read, capitals, digits and underscores starting with a capital. By default PENSTOCK_ and a slug of the API title.","incidentKey":"The key of the incident, or of the process instance it belongs to","incidentWrite":"Save the scenario next to the diagram's other scenarios (Pro). Default false: a preview that writes nothing.","incidentRun":"Run the scenario on the engine of the project, which has to be marked for tests, and say whether it reproduced the incident (Pro). Default false.","scenarios":"Run the saved scenarios on the changed processes after the change. Only on an engine marked deployment.forTests, and not when the change adds content that runs. Off by default.","dmnCase":"A case to save next to the DMN file: name, decision, inputs, expected and, optionally, rules (the numbers of the rules that must be applied). Needs file. Part of Penstock Pro.","migrateOnly":"Change ids to apply, from migrate plan; only these are written. Optional.","migrateExclude":"Change ids to leave out, from migrate plan. Optional.","verifyScenarios":"A glob that limits which scenario files run, for example flows/**/*.cases.json. Optional.","verifyOriginalProfile":"The penstock.yaml profile of the Camunda 7 (or Operaton, CIB seven) test engine. Optional; the default profile is used without it.","verifyConvertedProfile":"The penstock.yaml profile of the Camunda 8 test engine that runs the converted diagram.","driftEnvironment":"The environment to read: a profile of penstock.yaml that sets its own deployment.url. Defaults to the active profile or the plain deployment section.","driftAgainst":"A second environment to compare the first one with. Pro, and Team in a pipeline.","evidenceOut":"Where to write the pack, inside the project: a file name ending in .zip, or a folder. Defaults to .penstock/penstock-evidence.zip.","evidenceSince":"A git ref; the pack then also holds what changed since it, drawn in diagram terms.","evidenceFormat":"zip (the default) or dir.","evidenceForce":"Replace a pack that is already there.","importFile":"Absolute path to the file to import, or to the Camunda Modeler project folder.","importFrom":"The tool the file came from: modeler, signavio, bizagi or flowable. The import refuses a file that came from another tool. With modeler on a folder it reads the Camunda Modeler project.","importTo":"For Flowable: camunda7 (default) or camunda8, the Camunda version its extensions are converted to.","importWrite":"Write the BPMN file. Default false: a preview that writes nothing.","importOut":"Where to write, relative to the project root; it must stay inside the project. Default: beside the imported file.","importForce":"Replace the file at out if it exists. Default false.","refactorKind":"What is renamed","refactorFrom":"The current name","refactorTo":"The new name","refactorApply":"Write the changes. Without it only the plan is returned","refactorPlanId":"The planId of the preview of this same request; required with apply","refactorAcknowledge":"Apply although the plan lists refused places, which stay as they are","refactorForce":"Apply although the git tree has uncommitted changes","refactorMapping":"Path of the mapping file inside the project: JSON with a renames list, or lines of kind,old,new","refactorFile":"Path of the BPMN file inside the project","refactorElements":"Ids of the subprocess, or of the elements to move","refactorProcessId":"The id of the new process, which is also the name of its file","refactorName":"The name of the new process and of the call activity"},"mustBeText":"{tool}: {name} must be a non-empty text","mustBeObject":"{tool}: {name} must be an object","oneProject":"{tool} works on one project at a time. Give project.","mustBeTextList":"{tool}: {name} must be a list of non-empty texts (at most 20000, each at most 1024 characters)"},"checkUnknownSection":"check does not have a {section} section. It has {sections}.","badFailOn":"--fail-on should be error or warning, not {value}.","badTimeout":"The timeout should be a number of seconds.","badFormat":"--format should be {values}, not {value}.","preHookStopped":"The {stage} stage was stopped by its pre hook.","postHookStopped":"The {stage} stage was stopped by its post hook.","unknownCommand":"Unknown command: {command}","stopping":"Stopping: the running test case is cancelled and its build removed. Press Ctrl-C again to leave now.","show":{"needsDiagram":"show needs a diagram: penstock show process.bpmn"},"facts":{"badInput":"facts reads a JSON list of files, each with its path and its text, on standard input"},"web":{"serving":"Serving {folder}","pressCtrlC":"Press Ctrl+C to stop.","stopping":"Stopping.","notAFolder":"{folder} is not a folder.","badPort":"The port should be a number from 0 to 65535, not \\"{value}\\".","badHost":"The address should be an IP address or a host name, not \\"{value}\\".","noFreePort":"No port from {from} to {to} is free.","cannotListen":"Penstock is unable to listen: {reason}","portTaken":"Port {port} is in use, so Penstock uses {used}.","exposed":"Warning: --host {host} makes this machine reachable from other machines. Anyone with the link below can read and change the diagrams of the open project, and see the folder names on this machine.","noPageWarning":"The editor page is not part of this build, so only the API answers. Build the webview, or set PENSTOCK_WEB_ROOT to a built page.","noPage":"The editor page is not part of this installation.","browserFailed":"Penstock is unable to open a browser. Open the link above yourself.","reason":{"internal":"The server is unable to do that.","noSuchFile":"There is no such file.","noAccess":"The server is not allowed to do that.","isAFolder":"That is a folder, not a file.","diskFull":"The disk is full.","exists":"That already exists.","badPath":"{path} should be a path inside the folder.","outside":"{path} is outside the folder Penstock is serving.","notEditable":"Penstock writes only diagrams, decisions, forms, test cases, penstock.yaml and element templates, and {path} is none of them.","tooLarge":"The request should be under {limit} MB.","fileTooLarge":"The file should be under {limit} MB.","notAnObject":"The request should be a JSON object.","missingField":"The request should have a {field}.","wrongField":"The request has an incorrect {field}.","notJson":"The request body should be JSON, sent as application/json.","wrongHost":"This is not an address Penstock answers on.","wrongOrigin":"This request comes from another page, and Penstock answers only its own page.","noToken":"Open the link that penstock web printed: it carries the key this server needs.","methodNotAllowed":"That operation does not take this method.","noSuchOperation":"There is no such operation.","tooLong":"The address of the request is too long.","tookTooLong":"The request took too long.","notTheProject":"{path} is not the folder Penstock is serving.","badFileList":"The request should list between 1 and 500 files.","listedTwice":"{path} is listed twice.","alreadyExists":"{path} already exists.","badTraceName":"The run and the trace name should be lower case letters, digits and hyphens.","unknownFeature":"{feature} is not a feature Penstock knows.","tooMany":"The request has too many entries.","badProfile":"A profile name should be letters, digits, spaces, dots, hyphens or underscores, up to 80 characters.","notAnAddress":"The {field} should be an http or https address.","badEnginePath":"The engine is asked for paths on its own API only, with GET, POST, PUT, PATCH or DELETE.","tooManyHooks":"Too many deployment hooks are running.","noSuchRun":"There is no such hook run.","notWebAddress":"{url} is not a web address.","connectorRefused":"The connector catalogue refused that: {detail}","engineAnswerTooLarge":"The engine's answer should be under {limit} MB.","projectGone":"The folder of this project is no longer there.","noProject":"No project is open. Open one first.","projectChanged":"The server is serving another project now. Reload the page to follow it.","switchBusy":"A deployment is running. Wait for it to finish before opening another project.","badFolder":"{folder} should be the path of a folder.","notAbsolute":"{folder} should be an absolute path, such as /home/me/project or C:\\\\Projects\\\\app.","noSuchFolder":"{folder} does not exist.","notAFolder":"{folder} is a file, not a folder.","folderNotReadable":"Penstock is not allowed to read {folder}.","nameEmpty":"The name should not be empty.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > | or control characters.","nameDots":"The name should not start or end with a space, or end with a dot.","nameReserved":"{name} is a name that Windows reserves.","nameLong":"The name should be at most 255 bytes.","notTheRoot":"The project folder itself cannot be changed here.","isALink":"{path} is a symbolic link, and Penstock does not change links.","changedOnDisk":"{path} changed on disk since the page last read it.","kindChange":"{path} should keep the type of file it has.","moveIntoItself":"A folder cannot be moved into itself.","tooDeep":"The folder is nested too deeply.","folderHoldsOthers":"{path} holds files that Penstock does not edit, so it is not deleted.","archiveTooLarge":"The project has more than {files} files or more than {size} GB, which is too much for one download.","busy":"The file is in use by another program.","readOnly":"The disk is read-only.","otherDisk":"Penstock does not move files between disks.","noLanguageServer":"There is no language server named {server}.","languageServerMissing":"The language server command {command} is not installed on this machine.","languageServerUnsafe":"The language server {command} is a Windows command file that cannot be started with these arguments.","tooManyLanguageServers":"No more than {limit} language servers should run at once.","staleToolWindow":"The tool window changed since it was read. Reload the tree and try again.","noSuchAction":"That action is not in the tool window. Reload the tree and try again."},"unsupported":{"script":"Script files open in an IDE editor, which the browser editor does not have.","diff":"A version control diff is shown by an IDE.","clipboard":"The clipboard belongs to the browser.","chooser":"Files are chosen in the page, not in a system dialog.","navigation":"Opening code needs an IDE. Use Penstock in a JetBrains IDE or VS Code to jump to it.","view":"Tool windows belong to an IDE.","reveal":"The page opens diagrams itself.","tests":"Running tests from code needs an IDE. Run penstock scenarios run on the command line.","rename":"Renaming linked names across code needs an IDE.","confirm":"Confirmations are asked in the page itself.","migration":"The conversion preview is not in the browser editor. Run penstock migrate on the command line.","document":"The browser editor saves through the file operations and keeps its own undo history."},"page":{"expired":{"title":"This link does not open Penstock","text":"Its key is missing or no longer valid. Penstock may have been restarted since the link was made.","hint":"Use the link that penstock web printed in the terminal, or run penstock web again."},"missing":{"title":"There is no such page","text":"Penstock has no page at this address.","hint":"Go back to the editor with the link that penstock web printed."},"open":"Open the editor"},"servingWelcome":"No project is open yet. Choose one in the browser.","toolWindow":{"unsupported":{"outside":"That file is outside the project Penstock is serving.","tests":"Running tests from code needs an IDE. Run the scenarios in the diagram's Scenarios tab, or run penstock scenarios run on the command line.","migration":"Converting to Camunda 8 is not in the browser editor yet. Run penstock migrate analyze, convert or report on the command line.","templates":"Writing workers and element templates from the tool window is not in the browser editor yet. Run penstock templates generate on the command line."},"script":{"missing":"The diagram no longer has this script."}}},"webHost":{"reason":{"notLicensed":"Renaming linked names needs a Pro licence.","changedSince":"{file} changed after the rename was planned. Nothing was written.","licence":"The key was not accepted: {detail}","licenceService":"The licence service could not be reached: {detail}","keyShape":"The licence key looks incomplete. Paste it as it came in the purchase email.","nothingToRelease":"There is no activated licence on this machine to give back."}},"agentServe":{"needsProject":"Say which project the chats are for: penstock agent serve --project <dir>."},"agentLaunch":{"heading":"Agents that penstock agent <name> can start:","how":"Start one with: penstock agent <name> [-- <arguments for the agent>]","installed":"installed","missing":"not installed - {install}","notFound":"its command is not on this machine","unknown":"There is no agent called {agent}. Choose one of: {list}.","notInstalled":"{name} is not installed on this machine. Install it with: {install}","commandMissing":"The command of {name}, {command}, is not on this machine.","noMcp":"Penstock could not tell how to start its own MCP server from here, so the agent was not started.","customNote":"{name} is an agent you added, so it gets the penstock MCP server as JSON in the environment variable PENSTOCK_MCP_CONFIG.","cannotPrepare":"The agent was not started because its settings for this run could not be written: {reason}","cannotStart":"{name} could not be started: {reason}","unsafeArguments":"{name} is a Windows command file, and its arguments cannot be passed to a command file safely, so it was not started.","extraWords":"Put what is meant for the agent after --, for example: penstock agent {agent} -- <arguments>."},"start":{"npmMissing":"Penstock needs Node.js with npm to run its command line.","unpublished":"npm has no Penstock command line for this version, so the command did not start.","installFailed":"The Penstock command line could not be installed. Check your network or npm registry and try again.","notStarted":"The Penstock command line could not be started.","details":"Details","progress":"Starting the Penstock command line"},"test":{"notAnObject":"it must be an object such as {\\"order\\": \\"A-1\\"}"},"connections":{"title":"Connections in {folder}","titleIn":"Connections in {folder}, environment {environment}","environments":"Environments: {list}","noEnvironments":"Environments: none found (name them with .env.<name>, values-<name>.yaml, application-<name>.yaml or profiles in penstock.yaml)","nothingReferenced":"No diagram refers to a secret or an MCP client.","secrets":"Secrets","clients":"MCP clients","noSources":"No file that could supply secrets was found, so they are not checked: a secret that lives in a cloud console or a vault cannot be seen from here.","noClientSources":"No MCP client configuration was found, so the client ids are not checked.","opaque":"Also read from {from}, whose names cannot be seen ({place})","unused":"Defined and not used by any diagram","reconcile":"{target} compared with {against}","nothingMissing":"Nothing is missing in {target}.","missingHeading":"Defined for {against} and missing in {target}:","onlyHeading":"Only in {target}:","usedByDiagram":"used by a diagram","findings":"Findings: {count}","againstNeedsEnvironment":"--against compares with an environment chosen by --env; give --env <name> as well.","unknownEnvironment":"There is no environment named {environment}. Known environments: {known}.","noEnvironmentsKnown":"There is no environment named {environment}, and the project has none.","header":{"name":"NAME","status":"STATUS","usedIn":"USED IN","definedIn":"DEFINED IN"},"status":{"defined":"defined","undefined":"missing","unverifiable":"not checked"},"count":{"file":{"one":"{count} configuration file read","other":"{count} configuration files read"}}},"incident":{"needsKey":"Say which incident: penstock incident scenario <instanceKey|incidentKey>.","unknownAction":"There is no incident command {action}. Try penstock incident scenario.","found":"Incident {type} at {element} of {process}, instance {instance}.","message":"Message: {message}","scenario":"Scenario: {name}","notes":"Notes:","dryRun":"Nothing written. Add --write to save the scenario to {file}.","written":"Written to {file}.","exists":"{file} already has this scenario.","reproduced":"Reproduced: running the scenario raised the same incident.","notReproduced":"Did not reproduce: {reason}","notRun":"Not run: {reason}"},"agents":{"title":"AI agents in {folder}","none":"No AI agent was found in the diagrams.","kindTask":"task","kindSubprocess":"sub-process","limits":"Limits: model calls {calls}","memory":"Memory: {storage}, context window {window}","unset":"not set","noTools":"No tools","tools":"Tools: {count}","clients":"MCP clients","orphan":"Tool container {id} in {file} has no agent that uses it","standalone":"MCP client {client} in {file} is not used by an agent","count":{"agent":{"one":"{count} AI agent","other":"{count} AI agents"}},"scenarioNeedsFile":"Name the diagram file: penstock agents scenario <file>","scenario":"Scenario: {name}","scenarioSkipped":"No scenario for the agent {agent}","scenarioExists":"Already in {file}; nothing to add.","scenarioWritten":"Wrote {file}.","scenarioDryRun":"Nothing written. Run again with --write to add it to {file}.","migrate":{"change":{"moved":"{from} moved to {target}","set":"{target} set","added":"{target} added","kept-default":"{target} keeps the template default","remapped":"{target} value mapped to the new template"},"element":"{file}: {id} template version {from} -> {to}","nothing":"No AI agent element needs migrating.","dryRun":"Dry run: nothing is written.","freePreview":"Free preview: the first {shown} of {total} elements. Writing and the whole list are part of Penstock Pro.","untouched":"Left untouched, because the mapping cannot be proven:","summaryWritten":"Migrated {migrated}, left untouched {untouched}.","summaryDry":"Would migrate {migrated}, leave untouched {untouched}.","runWrite":"Run again with --write to apply it (Penstock Pro)."}},"receipt":{"usage":"Use receipt verify <file...> to check a change, or receipt check <receipt.json> to check a stored receipt.","needsFiles":"Name the files to verify: penstock receipt verify <file...> [--against <git-ref>].","needsReceipt":"Name the receipt to check: penstock receipt check <receipt.json>.","badRef":"{ref} is not a git ref that Penstock can use.","unknownRef":"{ref} is not a commit in the git history of this project.","differentProject":"{file} is not inside the project {root}; verify the files of one project at a time.","notAFile":"{file} is not a file.","written":"Receipt written to {file}.","receiptOutside":"{file} is outside the project.","receiptUnreadable":"{file} could not be read.","receiptInvalid":"{file} is not a Penstock receipt: {problems}","matches":{"one":"{file}: the file matches the receipt.","other":"{file}: all {count} files match the receipt."},"differs":{"one":"{file}: the file no longer matches the receipt.","other":"{file}: {count} files no longer match the receipt."},"mismatch":{"changed":"changed since the receipt was made","missing":"missing","exists":"exists, but the receipt says it was removed","outside":"outside the project","unreadable":"could not be read"},"gateBadBase":"{base} is not a git ref that Penstock can use.","gateNoHistory":"Penstock cannot read the history between {base} and HEAD. Fetch the full history (in GitHub Actions, fetch-depth: 0) so it can tell which changes an agent made.","gateNone":"No change since {base} was made by an agent, so no receipt is needed.","gateOk":{"one":"The file an agent changed has a receipt.","other":"The {count} files an agent changed all have a receipt."},"gateMissing":{"one":"The file an agent changed has no valid receipt:","other":"{count} files an agent changed have no valid receipt:"},"gateMore":"and {count} more","gateInvalid":{"one":"One stored receipt is not valid and was ignored.","other":"{count} stored receipts are not valid and were ignored."},"gateHow":"Run penstock receipt verify <file> --write and commit the receipt in .penstock/receipts."},"dmnTests":{"unknownTest":"Say what to test: penstock test task <file.bpmn> --element <id>, or penstock test dmn <file|folder>.","noFiles":"No DMN file found in {targets}.","badCoverage":"--min-rule-coverage must be a number from 0 to 100, not {value}.","coverageBelow":"Rule coverage is {percent}%, below the required {min}%.","preview":"Free preview: the first 3 cases of each decision were run. More cases are part of Penstock Pro.","saved":"Saved the case in {file}."},"policy":{"unknownAction":"\\"{action}\\" is not a policy command. Use one of: {actions}.","needsRule":"add-rule needs the name of a rule, for example penstock policy add-rule label-required --severity error.","needsSeverity":"add-rule needs --severity error, warn or off."},"evidence":{"badSince":"The ref \\"{ref}\\" is not a git ref this project has.","tooManyDiagrams":"The project has more than {limit} diagrams, decisions and forms, so no pack was built.","notInspected":"\\"{file}\\" is a link, too large or outside the project, so it was not inspected and no pack was built.","notDrawn":"\\"{file}\\" could not be drawn ({reason}), so no pack was built.","none":"nothing in this project","noSince":"no --since given","teamOnly":"part of the Team plan","included":"included","left":"left out","noGit":"not a git repository","title":"Penstock evidence pack","tool":"Built by Penstock {version} at {at}.","commit":"Git commit and author: {commit}","sealNote":"evidence.sha256 is the SHA-256 of evidence.json. It is an integrity checksum that shows the pack was changed afterwards. It is not a signature and not a legal attestation.","column":{"file":"File","bytes":"Bytes"},"dirNotZip":"--format dir writes a folder, so \\"{out}\\" should not end in .zip.","refused":"No evidence pack was written:","built":"Evidence pack written to {path}. Files listed: {files}.","sealed":"Seal (SHA-256 of evidence.json): {seal}","verified":"The pack is intact: {files} files match the manifest, and the seal {seal} matches evidence.json.","tampered":"The pack does not match its manifest and seal:","needsPack":"Say which pack to verify: penstock evidence verify <pack>.","unknownAction":"There is no such evidence command. Use one of: {actions}."}},"actions":{"undo":{"title":"Undo","tooltip":"Undo"},"redo":{"title":"Redo","tooltip":"Redo"},"auto-layout":{"title":"Auto layout","tooltip":"Lay the diagram out again"},"diagram-check":{"title":"Check","tooltip":"Check the diagram for problems"},"token-simulation":{"title":"Simulate","tooltip":"Run tokens through the process"},"coverage":{"title":"Coverage","tooltip":"Show what the process tests reach"},"live":{"title":"Monitor","tooltip":"What the engine is doing with this diagram now: instances waiting at each step and incidents"},"runs":{"title":"Scenarios","tooltip":"Run this diagram's scenarios on a local engine and see every step"},"migration":{"title":"Migrate to Camunda 8","tooltip":"What does not carry over to Camunda 8, and converting it"},"convert-operaton":{"title":"Convert to Operaton","tooltip":"Move a Camunda 7 or CIB seven diagram to the operaton: namespace"},"deploy":{"title":"Deploy","tooltipTo":"Deploy to {url}","tooltipEngine":"Deploy to the engine","noEngine":"Add an engine to penstock.yaml to deploy"},"open-tasklist":{"title":"Open in Tasklist","tooltip":"Open Tasklist in your browser"},"toggle-sidebar":{"title":"Sidebar","tooltip":"Sidebar"},"focus-canvas":{"title":"Focus canvas","tooltip":"Hide the sidebars and show only the canvas; press again to show them"},"fit-diagram":{"title":"Fit diagram","tooltip":"Show the whole diagram in the canvas"},"zoom-in":{"title":"Zoom in"},"zoom-out":{"title":"Zoom out"},"transaction-boundaries":{"title":"Transaction boundaries","tooltip":"Show where the engine commits a transaction: wait states and asynchronous continuations"},"minimap":{"title":"Minimap"},"trace-paths":{"title":"Trace paths","tooltipOn":"Show every path that runs through the selected element, and dim the rest of the diagram","tooltipOff":"Select a task, a gateway or an event to trace the paths that run through it"},"sketchy":{"title":"Sketchy drawing"},"show-comment-badges":{"title":"Show comment badges","tooltip":"Draw the number of open comments on each element that has some"},"export":{"title":"Export…","tooltip":"Save the diagram as SVG, PNG or PDF, or copy it as a picture"},"marketplace":{"title":"Templates…"},"import":{"title":"Import from another tool…","tooltip":"Turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN, and see what carries over before anything is written"},"share":{"title":"Share as HTML…","tooltip":"One file that opens offline in any browser"},"copy":{"title":"Copy"},"paste":{"title":"Paste"},"tour":{"title":"Show the tour again"},"keyboard-shortcuts":{"title":"Keyboard shortcuts","tooltip":"Every shortcut in this editor"},"open-documentation":{"title":"Documentation","tooltip":"Open the guide in your browser"},"undo-long":{"title":"Undo","tooltip":"Undo Last Operation"},"redo-long":{"title":"Redo","tooltip":"Redo Last Operation"},"dmn-check":{"title":"Check","tooltip":"Check decisions"},"export-table-workbook":{"title":"Export decision table as a workbook…","tooltip":"Save the inputs, the outputs and every rule as an Excel workbook"},"export-table-csv":{"title":"Export decision table as CSV…","tooltip":"Save the inputs, the outputs and every rule as comma separated values"},"import-table":{"title":"Import decision table…","tooltip":"Replace the rules of the selected table with those in a workbook or CSV"},"import-table-new":{"title":"Add rules from spreadsheet…","tooltip":"Fill the open decision table with the rules in a workbook or CSV"},"dmn-trace-paths":{"title":"Trace paths","tooltipOn":"Show every decision and input the selected decision needs, and everything that depends on it","tooltipOff":"Select a decision in the requirements diagram to trace what it needs"},"preview":{"title":"Preview","tooltip":"Try the form with sample data"},"form-check":{"title":"Check","tooltipUnreadable":"This form could not be read, so there is nothing to check","tooltip":"Check form"},"section":{"checkRun":"Check & run","layoutConvert":"Layout & convert","deployShare":"Deploy & share","view":"View","file":"File","edit":"Edit","help":"Help","recent":"Recent"},"editor-theme":{"title":"Editor theme","tooltip":"Follow the IDE, or use Light, Dark or Dracula"},"start-instance":{"title":"Start instance…","tooltip":"Start a process instance on the connected engine"},"debug-process":{"title":"Debug process","tooltip":"Run a copy of this process on a local engine and stop at breakpoints to read and change its variables"},"toggle-breakpoint":{"title":"Toggle breakpoint","tooltip":"Stop the debugger before the selected step"},"compare-with-head":{"title":"Compare with last commit","tooltip":"Show what changed since the last commit"},"show-licence":{"title":"Licence","tooltip":"See the plan, enter a licence key or buy one"},"timeline":{"title":"Timeline","tooltip":"Scrub through the steps of a run: an engine instance chosen in Monitor, or a scenario run"},"show-code-badges":{"title":"Show code badges","tooltip":"Draw a mark on each task that says whether its code was found in the project"},"chat":{"title":"AI chat","tooltip":"AI chat"},"test-task":{"title":"Test task…","tooltip":"Run the selected element on a local engine: the path before it is completed or mocked, and what it did is shown in Scenarios"},"template-source":{"title":"Source","tooltip":"Edit the template as JSON; the form follows what you type"},"template-loading":{"title":"Why not loaded","tooltip":"Which template files Camunda Desktop Modeler and Web Modeler load, and the reason when one does not"},"template-check":{"title":"Check","tooltip":"Check the template against the element template schema"},"cmmn-text":{"title":"Open as text","tooltip":"Penstock shows case models but cannot edit them; open the file in the text editor to change it"},"cmmn-check":{"title":"Check","tooltip":"Check the case model for references that point at nothing"},"evidence-pack":{"title":"Create evidence pack…","tooltip":"One reviewable package for an audit: the diagrams, the checks, the test results and what changed, with the SHA-256 of every file"},"refactor":{"title":"Refactor…","tooltip":"Rename a variable, message, signal, error, job type, decision, form or process across the project, or extract part of a diagram into a call activity"}},"autoLayout":{"autoLayout":"Auto layout","laidOut":{"one":"Laid out {count} element","other":"Laid out {count} elements"}},"canvas":{"debugTests":"Debug Tests","findUsagesInCode":"Find Usages in Code","goTo":"Go to {label}","goToImplementation":"Go to Implementation","runTests":"Run Tests","unableToReadTheFile":"Unable to read the file again"},"code":{"findUsages":"Find usages","followingAStepToThe":"Following a step to the code that runs it, its tests and its usages is part of Penstock Pro. A Camunda 7 class or bean is followed on Free.","goToCode":"Go to code","noCodeFoundForThis":"No code found for this step.","nothingInTheProjectRuns":"Nothing in the project runs, tests or uses it. A service task is linked by its job type, class or bean.","selectATaskToSee":"Select a task to see its code.","theProjectHasNotBeen":"The project has not been read yet.","theWorkersClassesBeansAnd":"The workers, classes, beans and tests behind a step show here once you select it on the diagram.","section":{"implementations":"Runs in","tests":"Tests","usages":"Used in"},"warn":{"missingImplementation":"Nothing in the code runs this step.","neverThrown":"Nothing in the code throws the error this step catches.","unsetTypo":"{name} is read, but only {closest} is set.","unset":"{name} is read, and nothing sets it.","unfetchedClosest":"The worker fetches {closest}, not {name}, so {name} is null.","unfetched":"The worker does not fetch {name}, so it is null.","unread":"The worker sets {name}, and no step after this one reads it.","lateRead":"The worker reads {name}, and no step before this one sets it.","nearCase":"This step's {name} differs in case from the {near} in the code.","near":"The code has {near}, one letter off the {name} this step uses.","implicit":"The job type of this step is the method name {method}, which a rename changes.","mappingOrder":"The mapping reads {path} as null: {target} is set by an earlier line.","lostUpdate":"Every parallel instance writes {name} over the others: the step has no output element."},"kind":{"JOB_TYPE":"the job type","TOPIC":"the topic","CLASS":"the java class","BEAN":"the bean","MESSAGE":"the message name","ERROR":"the error code"},"fact":{"places":{"one":"{count} place","other":"{count} places"},"here":{"one":"{count} here","other":"{count} here"},"withIncident":{"one":"{count} with an incident","other":"{count} with an incident"},"reachedBy":"reached by {tests} of {total} tests","notFetched":"not fetched by the worker","near":"the code has '{near}'","neverSet":"never set in the project","reached":"reached","thrownBy":"Thrown by","runsIn":"Runs in","nothingInCode":"nothing in the code","tests":"Tests","inCode":"In code","sets":"Sets","reads":"Reads","notFetchedClosest":"not fetched, '{closest}' is","unread":"written, read by no step after","lateRead":"read, set by no step before it","nearCase":"only '{near}' differs in case in the code","implicit":"taken from the method {method}","mappingOrder":"reads null, {target} is set by an earlier line","lostUpdate":"written by every instance, no output element","neverSetClosest":"never set, '{closest}' is","noTestReaches":"no test reaches it","coverage":"Coverage","theEngine":"the engine","on":"On {where}","testsReach":{"one":"{count} test reaches it","other":"{count} tests reach it"}},"finding":{"unfetchedWhere":"the code reads it, so it is null at runtime","missingImplementation":"Nothing in the code runs {name}","missingImplementationWhere":"no worker, delegate or bean implements it","neverThrown":"Nothing in the code throws the error {name} catches","neverThrownWhere":"no BpmnError or error command uses its code","typo":"{name} is read, but only {closest} is set","unfetched":"The worker does not fetch {name}","unfetchedClosestWhere":"it fetches {closest} instead, so {name} is null at runtime","unread":"Nothing reads {name} after this step","unreadWhere":"the worker sets it, and no later step reads it","lateRead":"Nothing sets {name} before this step reads it","lateReadWhere":"the worker reads it, and no step before it sets it","nearCase":"{name} differs in case from {near}, which the code has","near":"The code has {near}, one letter off the {name} this step uses","nearWhere":"{kind}, a name that does not match leaves the step with no implementation","implicit":"The job type of this step is the method name {method}","implicitWhere":"@JobWorker without a type takes the method name, so renaming it breaks the diagram","mappingOrder":"{path} is read as null, {target} is set by an earlier mapping line","mappingOrderWhere":"the engine evaluates every source before it writes any target","lostUpdate":"Every instance writes {name} over the others","lostUpdateWhere":"a parallel multi-instance step with no output element keeps only the last result","templateDrift":"The element template {name} no longer says what the worker reads: {drift}","variableField":"The variable {variable} has no field {field}. Its type {type} has {fields}","variableFieldNone":"The variable {variable} has no field {field}. Its type {type} has no field the engine reads","variableFieldWhere":"Read here, set by {from}","variableFieldWhereUnknown":"Read here","variableUnknown":"The variable {name} is read, but nothing in the diagram or the code sets it","variableUnknownWhere":"Nothing upstream sets it, and it is not a declared input"},"runTests":"Run tests","debugTests":"Debug tests","saidBy":{"elementsInFiles":"{count} elements in {files} diagrams","tasksInFiles":"{count} tasks in {files} diagrams","elementsInOneFile":"{count} elements in {file}","one":"{label} in {file}","tasksInOneFile":"{count} tasks in {file}"},"wording":{"caughtBy":"Caught by","decidedBy":"Decided by","namedBy":"Named by","readBy":"Read by","setBy":"Set by","startedBy":"Started by","usedBy":"Used by"},"showAllCount":{"one":"Show all {count}","other":"Show all {count}"},"lens":{"covers":"covers {percent}% of {label}","starts":"starts {label}"}},"comments":{"aCommentBelongsToAn":"A comment belongs to an element of the process, not to what the canvas draws around it.","addAComment":"Add a comment","addComment":"Add comment","everyElementThatStillHas":"Every element that still has a comment is in the list behind the back arrow.","everyOpenCommentInThe":"Every open comment in the diagram shows here.","hideResolved":"Hide resolved","noCommentsYet":"No comments yet.","noOpenComments":"No open comments.","sayWhatThisElementIs":"Say what this element is for, or what is still missing","selectAnElementAndAdd":"Select an element and add a comment to it.","showOnTheDiagram":"Show {label} on the diagram","showResolved":"Show resolved ({resolved})","thisElementCannotTakeComments":"This element cannot take comments.","thisElementIsNoLonger":"This element is no longer in the diagram.","waitingForADiagram":"Waiting for a diagram.","openCount":{"one":"{count} open","other":"{count} open"},"openCommentCount":{"one":"{count} open comment","other":"{count} open comments"},"resolvedCount":{"one":"{count} resolved","other":"{count} resolved"},"openAndResolved":"{open} open, {resolved} resolved","openTheComments":"{title} - open the comments","commentsOf":"{comments} of {element}","anonymous":"Anonymous","resolvedState":"Resolved","comment":"Comment","edit":"Edit","save":"Save","cancel":"Cancel","reopen":"Reopen","resolve":"Resolve","delete":"Delete","signedBy":"Signed {name}","writeTheFirstOneBelow":"Write one below to start a thread on this element."},"coverage":{"closeCoverage":"Close coverage","showTheWayThisTest":"Show the way this test takes","testCoverage":"Test coverage","coverage":"Coverage","tests":"Tests","allTests":"All tests","notReached":"Not reached","coveredOf":"{covered} of {total}","noTestReportCoversThis":"No test report covers this diagram yet. Run its process tests with Camunda Process Test, or on Camunda 7 with the process test coverage extension, and what they reach shows here.","testCount":{"one":"{count} test","other":"{count} tests"}},"debug":{"pausedHere":"Paused here","instanceOf":"instance {id}"},"deploy":{"clientId":"Client id","clientSecret":"Client secret","confirm":"Deploy {what} to {where}?","deployHook":"Deploy hook","deployToCancelled":"Deploy to {target} cancelled","deployingTo":"Deploying {fileName} to {target}…","editConnection":"Edit connection…","editConnection2":"Edit connection","engineAddress":"Engine address","engineConnection":"Engine connection","enterTheClientId":"Enter the client id","enterTheClientSecret":"Enter the client secret","enterThePasswordToSign":"Enter the password to sign in with","enterTheUserNameTo":"Enter the user name to sign in with","files":{"one":"{count} file","other":"{count} files"},"keptInPenstockLocalYaml":"Kept in penstock.local.yaml, which stays on this machine.","keptInTheIdeS":"Kept in the IDE's password safe.","notNeeded":"Not needed","notReady":"{name} was not deployed: {target} has no address or password yet, set it under Connection in the editor","notSetYet":"Not set yet","nothingInToDeploy":"Nothing in {fileName} to deploy","nothingToDeploy":"Nothing to deploy","profile":"Profile","profileInForce":"the profile in force","readingTheDiagram":"Reading the diagram…","runningTheDeployHook":"Running the deploy hook…","saveAndDeploy":"Save and deploy","savedInTheIdeS":"Saved in the IDE's password safe. Type to replace it.","setUpConnection":"Set up connection…","signIn":"Sign in","signInHint":"{message}. Set the sign-in under Connection in the editor","succeededOn":"{message} on {target}","title":"Deploy","tokenAddress":"Token address","unableToDeploy":"Unable to deploy: {reason}","unableToSaveTheConnection":"Unable to save the connection: {failure}","userAndPassword":"User and password","whatWillBeSent":"What will be sent","deploy":"Deploy","problemLine":"line {line}","andNMore":"and {number} more","definitionIsLive":"live {key} v{version}","notConfirmedInTime":"not confirmed within {seconds}s: {key}","preDeployHookFailed":"Unable to run the preDeploy hook, nothing was sent","refusedNothingDeployed":{"one":"The engine refused {count} file and deployed nothing:","other":"The engine refused {count} files and deployed nothing:"},"answeredStatus":"The engine answered {status}: {reason}","deployedFiles":"Deployed {files}","deployedAs":"Deployed {files} as {definitions}","definitionsNotShownInTime":"The engine took the deployment but did not show its definitions in time","oauthClient":"OAuth client","user":"User","password":"Password","audience":"Audience","nameTenantAndTheRest":"Name, tenant and the rest are set in penstock.yaml.","addressScheme":"The engine address should start with http:// or https://","tokenAddressScheme":"The token address should start with http:// or https://","hookCancelled":"hook {stage}: cancelled"},"diagramCheck":{"convert":"Convert…","fix":"Fix","noProblemsFound":"No problems found.","nothingToReportAcrossElements":"Nothing to report across {checked} elements and connections. The check runs again as you edit.","showTheDiagramConvertedFor":"Show the diagram converted for Camunda {target}, and choose what to write","theCheckStartsOnIts":"The check starts on its own as soon as the diagram is read, and runs again as you edit.","howItRuns":"How it runs","drawing":"Drawing","engine":"Engine","code":"Code","rules":"Rules","why":"Why","error":"Error","warning":"Warning","templates":"Element templates","connections":"Connections","agents":"AI agents"},"dmn":{"addRules":"Add rules","addRulesFrom":"Add rules from {source}","cell":"Cell","change":"Change","checkTheDecisionsToSee":"Check the decisions to see problems here.","hitPolicy":"Hit policy {hitPolicy}","import":"Import {source}","intoTheOpenDecisionTable":"Into the open decision table: ","intoTheSelectedTable":"Into the selected table: ","openADecisionTableEnter":"Open a decision table, enter the values its inputs ask for and see which rules match and what the decision returns.","openTheRequirementsDiagram":"Open the requirements diagram","openTheRequirementsDiagramTo":"Open the requirements diagram to change the decision's name, its inputs and how its rules reach it.","requirements":"Requirements","rule":"Rule","selectADecisionTableTo":"Select a decision table to try it.","thePropertiesOfADecision":"The properties of a decision are edited in the requirements diagram.","thisShouldBeADate":"This should be a date, as YYYY-MM-DD.","thisShouldBeANumber":"This should be a number.","thisShouldBeTrueOr":"This should be true or false.","view":{"boxedExpression":"Boxed expression","decisionTable":"Decision table","drd":"Requirements diagram","literalExpression":"Literal expression"},"viewTooltip":"{kind}: {label}","count":{"rule":{"one":"{count} rule","other":"{count} rules"}},"readErrorAtLine":"{reason} (line {line})","namedLikeAWorkbook":"{file} is named like a workbook but is not one.","noHeaderRow":"The file has no header row naming the inputs and outputs.","theFileIsEmpty":"The file is empty.","workbookNotOpened":"The workbook could not be opened. It may be damaged or password protected.","workbookHasNoSheet":"The workbook has no sheet to read.","headerNeeds":"The header names {header}; the table needs {wanted}","rowCannotBeRead":"Row {line} cannot be read: \\"{cell}\\" is not a comparison, a range or a value","pasteColumnsLeftOut":{"one":"{count} pasted column has no place in the table and was left out.","other":"{count} pasted columns have no place in the table and were left out."},"duplicateId":"The id {id} is used by more than one element, so Penstock cannot tell them apart","nothingChanges":"nothing changes","aNewTableWith":"a new table with {rules}","ruleChanges":{"one":"{count} rule changes","other":"{count} rules change"},"rulesAreAdded":{"one":"{count} rule is added","other":"{count} rules are added"},"rulesAreRemoved":{"one":"{count} rule is removed","other":"{count} rules are removed"},"notADocument":"The file is not a DMN document","notValid":"The file is not valid DMN: {reason}","saveAsCsv":"Save the decision table as CSV","saveAsWorkbook":"Save the decision table as a workbook","csvIsOneCellPerColumn":"Comma separated values, one cell per column","workbookHasInputsAndOutputsFirst":"An Excel workbook with the inputs and outputs in the first row","createFromSpreadsheet":"Create a decision table from a spreadsheet","importIntoTheTable":"Import a spreadsheet into the decision table","spreadsheetNamesTheInputs":"An Excel workbook or a CSV whose first row names the inputs and the outputs","notReadAsASpreadsheet":"The file could not be read as a spreadsheet.","importAction":"Import","theTableAlreadySays":"The table already says this, so there is nothing to import. Cancel, or change the file and try again.","oneUndoTakesTheImport":"One undo takes the whole import back.","sheetName":"Decision table"},"dmnMode":{"decisionCheck":"Decision check","gotIt":"Got it","noDecisionTableIsOpen":"No decision table is open, so there is nowhere to put the rules. Open a decision table from the Requirements diagram and import the file again.","noDecisionTableIsOpen2":"No decision table is open, so there was nothing to write the rules into. Open a decision table from the Requirements diagram and import the file again.","noRulesOverlapAndEvery":"No rules overlap, and every input has a rule.","theDecisionTableWasSaved":"The decision table was saved to {saved}.","theRulesWereAddedTo":"The rules were added to the open decision table. Undo takes them back.","theRulesWereReplacedUndo":"The rules were replaced. Undo takes them back."},"editor":{"checkTitle":"Diagram check","configFailed":"Unable to load the project configuration.","convert":"Convert","convertText":"This will convert all camunda: properties and attributes to operaton: ones. Would you like to proceed?","convertTitle":"Convert namespace","copiedImage":"Copied as an image","copyImageFailed":"The image could not be copied","deleteFailed":"Unable to delete the elements","exportFailed":"Unable to export: {message}","exportOpenFailed":"Unable to open the export dialog","exported":"Diagram exported as {format}","importFailed":"The diagram could not be imported: {message}","layoutFailed":"Unable to lay out the diagram","noLayout":{"laidOut":"This file had no layout. Penstock laid it out; the file is unchanged until you save.","placed":"This file had no layout, so Penstock placed the elements in a simple grid. Auto layout (Pro) arranges it properly."},"layoutBadShape":"Unable to lay out the diagram: {element} has a shape that cannot be drawn ({problem}). Fix its bounds in the file and try again.","layoutBadWaypoint":"a waypoint is at ({x}, {y})","layoutTooSlow":"Unable to lay out the diagram within {seconds} seconds. It is too large or too tangled for auto layout. The diagram was not changed.","layoutAnElement":"an element","loadFailed":"Unable to load the diagram: {message}","loading":"Loading...","namespaceMessage":"This is an Operaton project, but the diagram uses the Camunda 7 namespace.","namespaceTitle":"Wrong engine namespace","noMatch":"Nothing in this project matches {reference}","noTest":"No test in this project uses {name}","noUsage":"No code in this project uses {name}","noWorker":"No code in this project implements {name}","reloadFailed":"The file changed and could not be read as BPMN","saveFailed":"Unable to save the changes","saveRefused":"Unable to save the changes: {reason}","stopSimulation":"Stop Token Simulation before editing the diagram","traceFailed":"The trace of that run could not be read","unknownError":"Unknown error","pasteEmpty":"The clipboard is empty. Copy a diagram element first.","pasteNotDiagram":"The clipboard holds text, not diagram elements, so there is nothing to paste.","pasteOtherDiagram":"The clipboard holds elements of another kind of diagram, so there is nothing to paste here.","pasteUnreadable":"Penstock cannot read the clipboard in this browser. Paste on the diagram with the keyboard instead."},"editorShell":{"close":"Close {title}","collapsePalette":"Collapse palette","openPalette":"Open palette","showAllMore":"Show all ({more} more)","useCheckInTheToolbar":"Use Check in the toolbar to look for problems."},"engineQuestion":{"itDecidesThePaletteAnd":"It decides the palette and the properties, and goes into penstock.yaml. The diagram opens as soon as you have chosen.","theEngineCouldNotBe":"The engine could not be saved: {error}","whichEngineRunsThisDiagram":"Which engine runs this diagram?"},"files":{"connectorsFailed":"The connectors directory could not be used (HTTP {status})","exportAs":"Export as {format}","saveTitle":"Save {extension} file"},"form":{"checkTheFormToSee":"Check the form to see problems here.","everyFieldWritesItsOwn":"Every field writes its own variable, and every option means something different.","nothingToPreviewYet":"Nothing to preview yet.","thePreviewFillsInAs":"The preview fills in as soon as the form is read.","theReasonIsOnThe":"The reason is on the canvas. Fix the file and Penstock reads it again.","thisFormCouldNotBe":"This form could not be read, so there is nothing to check."},"formMode":{"formCheck":"Form check"},"formPreview":{"inputDataOfTheForm":"Input data of the form as JSON","sample":"Sample {key}","sampleData":"Sample data","theInputHasToBe":"The input has to be a JSON object.","theInputIsNotValid":"The input is not valid JSON: {failure}","inputData":"Input data","outputData":"Output data","fieldsNeedAttention":{"one":"{count} field needs attention","other":"{count} fields need attention"}},"importDiagram":{"aDrawIoVisioSignavio":"A draw.io, Visio, Signavio or Bizagi diagram","diagramImported":"Diagram imported","importDiagram":"Import diagram","saveTheImportedDiagram":"Save the imported diagram","theBpmn20File":"The BPMN 2.0 file to create","thisFileCouldNotBe":"This file could not be imported","why":{"assumed":"These were read by what they look like. Check that they are what you meant.","lost":"BPMN 2.0 has no place for these, so they are not in the new diagram.","unmapped":"These have no BPMN meaning and are not in the new diagram."},"savedAs":"Saved as {path}","everythingInTheFileWas":"Everything in the file was mapped.","connectorsKeepTheRoute":"Connectors keep the route they were drawn with. Auto layout can tidy the result.","fromAnotherTool":"Import from another tool","sourceLabel":"The file comes from","sourceHint":"Pick the tool to be sure the right extensions are read; a file from another tool is refused.","sourceAuto":"Detect automatically","targetLabel":"Convert Flowable extensions to","chooseFile":"Choose file…","saveAs":"Save as…","previewTitle":"Import preview","previewLead":"Nothing has been written yet. Check what carries over and what does not, then save."},"lint":{"nothingToShowOnThe":"Nothing to show on the diagram","showWhereTheyAreOn":"Show where they are on the diagram"},"live":{"userTasks":"User tasks","noUserTasksWaiting":"No user tasks are waiting on this instance.","unableToLoadTasks":"Unable to load user tasks from the engine.","unableToCompleteTask":"Unable to complete user task.","unableToConnect":"Unable to connect to the engine.","completing":"Completing…","taskCompleted":"Task completed.","askTheEngineAgain":"Ask the engine again","askingTheEngine":"Asking the engine…","history":"History","noFinishedInstances":"No finished instances found.","noFinishedInstancesHint":"Instances that completed or were cancelled will appear here.","askingHistory":"Asking the engine for finished instances…","compareWithWhatTheEngine":"Compare with what the engine has seen","isNotDeployed":"{processId} is not deployed.","itIsNotOnYet":"It is not on {where} yet. Deploy the diagram to see its instances.","noEngineConnected":"No engine connected.","noInstanceIsRunning":"No instance is running.","nothingIsWaitingOrHas":"Nothing is waiting or has an incident on {where}.","openTheCodeThatRuns":"Open the code that runs this task","openInTasklist":"Open in Tasklist","readTheVariables":"Read the variables","readingWhichInstancesOfThis":"Reading which instances of this diagram are running and what they are waiting on.","refresh":"Refresh","setUpADeploymentProfile":"Set up a deployment profile with an address, and a password if it needs one, to see the instances waiting on each task and their incidents.","showOnTheDiagram":"Show {selected} on the diagram","theEngineCouldNotBe":"The engine could not be read.","use":"Use","useThisInstanceForAn":"Use this instance for an expression","waitingHere":"{waiting} waiting here","instance":"Instance","tryOnInstance":"Try on instance","variables":"Variables","neverSetInProduction":"Never set in production","unusedInTheModel":"Unused in the model","incidents":"Incidents","waiting":"Waiting","credentialsMayNotAllow":"The engine refused the question ({status}): the profile's credentials may not allow reading process instances","answeredStatus":"The engine answered {status}","answeredNotJson":"The engine answered with something that is not JSON","localEngine":"Local {engine}","theEngine":"the engine","processVersion":"process version {version}","namedProcessVersion":"{process} version {version}","incidentsOn":{"one":"{count} incidents · {what}","other":"{count} incidents · {what}"},"incidentsBadge":{"one":"{count} with an incident","other":"{count} with an incident"},"askingWhichInstancesRun":"Asking {where} which instances of {process} are running.","noInstanceRunning":"No instance of {process} is running on {where}.","secretNotResolved":"{value} - a secret, so the engine did not resolve it","selectATaskToTryOn":"Select a task, a gateway or a flow to try its conditions and mappings on {instance}.","trying":"Trying","try":"Try","reading":"Reading","select":"Select {name}","sevenCannotEvaluateHere":"Camunda 7 has no way to evaluate an expression. It needs Camunda 8.9 or newer, so the variables of the instance are what you get.","theModelAndTheEngineAgree":"The model and the engine agree on every variable name.","theEngineHasSeenThese":"The engine has seen these, and nothing in the diagram names them.","asking":"Asking","thisNeedsCamunda":"This needs Camunda {version}.","instancesHere":{"one":"{count} instance","other":"{count} instances"},"urlAt":"{url} at {when}","startInstance":"Start instance","startInstanceEllipsis":"Start instance…","startInstanceTooltip":"Start a process instance on the connected engine","startingInstance":"Starting…","processDefinition":"Process ID","variablesJson":"Variables (JSON)","variablesHelp":"JSON object with variables to pass to the instance","variablesInvalidJson":"Variables should be valid JSON","variablesMustBeObject":"Variables should be a JSON object","instanceStarted":"Started instance {id}","unableToStartInstance":"Unable to start instance","retry":"Retry","retrying":"Retrying","retryIncident":"Retry this incident","unableToRetryIncident":"Unable to retry incident: {reason}","cancelInstance":"Cancel instance","cancelling":"Cancelling","cancelInstanceTitle":"Cancel instance","cancelInstanceConfirm":"Cancel process instance {instance}?","unableToCancelInstance":"Unable to cancel instance: {reason}","sendMessage":"Send message","broadcastSignal":"Broadcast signal","messageName":"Message name","signalName":"Signal name","correlationKey":"Correlation key","sending":"Sending","broadcasting":"Broadcasting","send":"Send","broadcast":"Broadcast","unableToSendMessage":"Unable to send message: {reason}","unableToBroadcastSignal":"Unable to broadcast signal: {reason}"},"main":{"fileChangedOnDisk":"File Changed on Disk","keepEditing":"Keep Editing","theDiagramWasChangedOutside":"The diagram was changed outside the editor. Reloading loads those changes and drops what you have not saved; keeping it means your next save overwrites them."},"marketplace":{"anyElement":"Any element","backToTheTemplates":"Back to the templates","category":"Category","checkForUpdates":"Check for updates","checkingForANewerRelease":"Checking for a newer release…","connectorTemplates":"Connector templates","default":"Default:","deprecated":"Deprecated","downloadingTheConnectorTemplatesFrom":"Downloading the connector templates from GitHub…","elementType":"Element type","isNotInTheProject":"{id}{version} is not in the project or in the downloaded connector templates","loadingTemplateDetails":"Loading template details…","needsANewerCamundaEngine":"Needs a newer Camunda engine than this diagram targets","noTemplateFitsThisDiagram":"No template fits this diagram's engine","noTemplateMatchesTheFilters":"No template matches the filters","otherProperties":"Other Properties","saveElementTemplate":"Save Element Template: {name}","searchTemplatesByNameDescription":"Search templates by name, description or keyword","selectLocationToSaveThe":"Select location to save the element template","templateInstalled":"Template \\"{name}\\" installed","templateNotDownloaded":"Template not downloaded","download":"Download","templateSavedPenstockFindsTemplates":"Template \\"{name}\\" saved. Penstock finds templates in a .camunda/element-templates folder above the diagram; list this file under elementTemplates in penstock.yaml to use it from here.","theConnectorTemplatesCouldNot":"The connector templates could not be loaded","thisDiagramTargetsCamunda":"This diagram targets Camunda {engineVersion}","type":{"Boolean":"Checkbox","Dropdown":"Select","Hidden":"Hidden","Number":"Number","String":"Text","Text":"Multi-line Text"},"unableToInstallTheTemplate":"Unable to install the template: {failure}","viewDocumentation":"View documentation","overview":"Overview","appliesTo":"Applies to","engine":"Engine","properties":"Properties","configurationProperties":"Configuration properties","details":"Details","all":"All","installedOnly":"Installed only","clearFilters":"Clear filters","today":"today","todayAt":"today at {time}","tomorrowAt":"tomorrow at {time}","yesterday":"yesterday","daysAgo":{"one":"{count} day ago","other":"{count} days ago"},"notAmongConnectors":"{ids} is not among Camunda's published connector templates","thisDiagramTargets":" - this diagram targets {version}","camundaConnectors":"Camunda connectors {ref}","checked":", checked {when}","couldNotCheckForANewerRelease":"Could not check for a newer release: {error}","couldNotDownloadConnectors":"The connector templates could not be downloaded from GitHub: {error}","triedAgainAfter":" They are tried again after {when}.","templateCount":{"one":"{count} template","other":"{count} templates"},"forCamunda":" for Camunda {version}","unnamed":"Unnamed","feelIs":"FEEL: {feel}","options":"Options:","install":"Install","installed":"Installed","installing":"Installing…","configurable":"{number} configurable","showForNewerEngines":"Show {number} for newer engines"},"migration":{"apply":{"afterDependencies":"The worker skeletons need the Camunda 8 client library ({dependency}) in the build; they do not compile or run until it is added.","reason":{"changed":"changed since it was read","symlink":"is a symbolic link","outside":"is outside the project","appeared":"appeared after the plan was made","vanished":"is gone"},"refused":"Nothing was written: {files}","configChange":"penstock.yaml now says engine: camunda-8, so the files are checked as Camunda 8","alreadyThere":"The file is already there and was left as it is","outsideProject":"The name of this file points outside the project, so it was not written","workerReason":"Job worker skeleton for the job type {jobType}","reportReason":"The migration report: what changed and what needs a person","title":"Camunda 7 to Camunda 8 migration","intro":"Written by penstock migrate apply for Camunda {target}. The Camunda 7 files were rewritten in place and nothing was deleted.","summaryHeading":"Summary","summaryFiles":"{rewritten} files rewritten, {created} files created","summaryElements":"{converted} elements converted, {manual} need a person, {review} to check","filesHeading":"Rewritten files","colFile":"File","colChanged":"Converted","colPerson":"Needs a person","colCheck":"To check","changesHeading":"What was changed","personHeading":"What needs a person","personNone":"Nothing needs a person.","kindManual":"to do","kindReview":"to check","refusedHeading":"Expressions and scripts that were not translated","refusedNone":"Every expression and script was translated.","workersHeading":"Job workers","workersNone":"No job worker is needed.","workersIntro":"Each job type below needs a running Camunda 8 job worker. The skeletons map the variables the old delegate read and wrote, where the code showed them.","colJobType":"Job type","colWorkerFile":"Worker file","colReads":"Reads","colWrites":"Writes","colUsedBy":"Used by","noSkeleton":"no skeleton written","createdHeading":"Files created or kept","unreadableHeading":"Files that could not be read","checkHeading":"Check under the Camunda 8 profile","checkNotRun":"The check was not run.","checkClean":"penstock check found nothing.","checkFound":"penstock check found {errors} errors and {warnings} warnings:","afterHeading":"After this","afterDelegates":"The Camunda 7 delegate and handler classes were not touched. Remove them once the workers run.","afterInstances":"Running instances and history stay on Camunda 7 until they finish or are moved with the Data Migrator."},"convertUnchanged":"Convert unchanged","needsWork":"Needs work","reviewAfterConverting":"Review after converting","saveTheDiagramFirstOnly":"Save the diagram first: only a diagram in a file can be converted.","theDiagramCouldNotBe":"The diagram could not be read.","change":{"async":"The asynchronous continuation is removed","jobWorkerTask":"Becomes a job worker task with the job type {jobType}","retries":"The retry cycle becomes {retries} retries","fieldHeaders":"The field injections {fields} become task headers","conditionFeel":"The condition is written as a FEEL expression","conditionRewritten":"The condition is rewritten as a FEEL expression","collection":"The collection {collection} becomes the input collection","loopCount":"The loop count {cardinality} becomes an input collection","completionCondition":"The completion condition is rewritten as a FEEL expression","messageName":"The message name {name} is written as a FEEL expression","timer":"The timer is rewritten as a FEEL expression","errorVariable":"The {source} is stored in the variable {variable} by an output mapping","feelScript":"The script becomes a FEEL script expression","userTask":"Becomes a Camunda user task","assignment":"The assignment becomes an assignment definition","formRef":"The form {form} is linked as a Camunda Form","externalForm":"The form key {formKey} is kept as an external form reference","generatedForm":"The form fields are written as the Camunda Form {form}","calledDecision":"Calls the decision {decision} and keeps its result in {result}","calledProcess":"Calls the process {process}","listener":"The {event} listener {name} becomes a job worker with the job type {jobType}","platform":"Marked as a Camunda {target} diagram","dmnVersion":"The decisions are moved to DMN 1.3","expressionRewritten":"The expression is rewritten as a FEEL expression","dmnHistoryTimeToLive":"The history time to live is removed, Camunda 8 does not use it","dmnPlatform":"Marked as a Camunda {target} decision file","formPlatform":"Marked as a Camunda {target} form","versionTag":"The version tag {tag} is kept as Camunda 8's version tag","ioMapping":{"one":"{count} input or output parameter becomes an input and output mapping","other":"{count} input or output parameters become an input and output mapping"},"asyncBefore":"asynchronous continuation","removed":"removed","camunda7Implementation":"Camunda 7 implementation","userTaskBefore":"user task"},"extraFile":{"form":"the form of {where}"},"failure":{"notBpmn":"The file is not a BPMN diagram Penstock can read.","notDmn":"The file is not a DMN diagram Penstock can read.","notForm":"The file is not a form Penstock can read."},"detail":{"scriptExpression":"the {format} script was read as one expression, and {format} treats text, numbers and null differently from FEEL","complexGateway":"Camunda 8 has no complex gateway.","complexGatewayAction":"Model the join with an inclusive or a parallel gateway and conditions.","transaction":"Camunda 8 has no transactions and no cancel events.","transactionAction":"Model it as a subprocess with an error boundary event and compensation.","mappingValue":"The value is a {type}, which the converter does not read.","noMapping":"Camunda 8 has no {kind} mappings on a {element}.","standardLoop":"Camunda 8 has no standard loops.","standardLoopAction":"Model the loop with a gateway and a sequence flow back, or as a multi-instance activity.","cancelEvent":"Camunda 8 has no transactions and no cancel events.","cancelEventAction":"Model it with an error event and compensation.","errorCode":"Camunda 8 error codes are fixed or given by the worker that throws them","decisionBound":"The decision {name}","callBound":"The call of {name}","noTarget":"A variable binding has no target.","decisionNamed":"The decision {name}","inputNamed":"The input {name}","ruleCondition":"A condition of rule {rule}","ruleOutput":"An output of rule {rule}","listenersOldTarget":"Camunda 8 has execution listeners from 8.6; this converts for {target}.","listenersNoSequenceFlow":"Camunda 8 has no listeners on sequence flows.","listenersNoOn":"Camunda 8 has no execution listeners on a {element}.","listenersEndOnly":"Camunda 8 runs only end listeners on a {element}.","listenersFields":"It is given injected fields, which Camunda 8 listeners do not have.","listenersExpression":"It is an expression or a script, and a Camunda 8 listener is a job for a worker.","taskListenersOldTarget":"Camunda 8 has task listeners from 8.8; this converts for {target}.","taskListenersNoEvent":"Camunda 8 has no {event} event for task listeners."},"juel":{"emptyBecame":"\\"empty\\" became a test for null, empty text, an empty list and an empty map, the four things Java EL counts as empty","stringOpen":"a string in it is not closed","character":"it uses \\"{what}\\", which has no FEEL counterpart","trailing":"it continues after a complete expression at \\"{what}\\"","expected":"\\"{what}\\" was expected where \\"{found}\\" is","propertyName":"a property name is missing after \\".\\"","tooComplex":"it is too long or too deeply nested to convert","wordAsValue":"\\"{what}\\" stands where a value was expected","endsEarly":"it ends too early","tokenAsValue":"\\"{what}\\" stands where a value was expected","contextObject":"it reads \\"{what}\\", which exists only inside the Camunda 7 engine","dollarInName":"the name \\"{what}\\" contains \\"$\\", which a FEEL name cannot","reservedWord":"\\"{what}\\" is a reserved word in FEEL","localVariable":"a local variable is read by name; in Camunda 8 the name resolves through the scopes, so check that no outer variable shadows it","businessKey":"it reads the business key, which Camunda 8 does not have; carry it as a process variable","engineId":"it reads an engine id, which a FEEL expression cannot see in Camunda 8","executionCall":"it calls execution.{what}(), which runs inside the Camunda 7 engine","takesOne":"{what}() takes one argument here","takesNone":"{what}() takes no argument here","equalsTakesOne":"equals() takes one argument here","size":"{target}.size() became count(), which works when the variable is a list; for a map, read its entries instead","javaCall":"it calls the Java method {what}(), and FEEL cannot call Java","exponent":"it writes a number with an exponent, which FEEL does not read","enginePath":"it reads {target}.{what}, which exists only inside the Camunda 7 engine","indexShifted":"a list index moved by one: FEEL counts list items from 1, Java from 0","computedIndex":"it reads an item by a computed index, and FEEL counts list items from 1 where Java counts from 0","juelFunction":"it calls {what}(), a function Camunda 7 provides and FEEL does not","namespacedFunction":"it calls the function {prefix}:{what}(), which Camunda 8 does not provide","empty":"it uses \\"empty\\" on something other than a variable, a property or an item, and FEEL cannot test that without naming it first","textPlus":"it adds text with \\"+\\", which Java EL does not allow and FEEL treats as joining strings","expressionOpen":"an expression in it is not closed with \\"}\\"","joinedStrings":"text with expressions inside became joined strings; a value that is null makes the whole text null in FEEL, where Camunda 7 wrote an empty string"},"worker":{"becomes":{"taskListener":"a task listener job of type {jobType}, on the {event} event (Camunda 8.8 or later)","executionListener":"an execution listener job of type {jobType}, on the {event} event (Camunda 8.6 or later)","topic":"a job worker of type {jobType}; the external task handler moves to a Camunda 8 job worker","expression":"a job worker of type {jobType} that makes the call the expression made","class":"a job worker of type {jobType}"},"note":{"businessKey":"It reads the business key. Camunda 8 has none: carry the value as a process variable.","engineServices":"It uses {services}, which a Camunda 8 worker does not have: use the Camunda client, or a message, instead.","readsAllVariables":"It reads every variable. A Camunda 8 worker fetches all variables unless it names the ones it needs."}},"report":{"theProject":"the project","heading":"Camunda 7 to Camunda 8 migration: {name}","onDate":" on {date}","automatic":"{count} more convert unchanged.","needsWork":"Needs work","reviewAfter":"Review after converting","notInProject":"not in this project","nothingToMigrate":"This project has no Camunda 7 diagrams, decisions or forms: there is nothing to migrate.","scope":"Scope","columnStatus":"Status","columnFiles":"Files","columnMeaning":"Meaning","costs":"What the move costs","blockers":"Blockers","blockersHint":"Camunda 8 has no form for these. Remodel them before converting.","blockerWhere":"in {where} ({path}). {action}","files":"Files","columnFile":"File","columnNeedsWork":"Needs work","columnReview":"Review","columnConverts":"Converts","finding":"{where}: {title}. {action}","code":"Code","codeHint":"What each Java delegate, external task handler and listener becomes. Penstock writes a job worker skeleton beside the code and never over it.","columnValue":"Class, bean or topic","columnWhere":"Where","columnBecomes":"Becomes","columnNotes":"Notes","apis":"Camunda 7 API in the Java code","apisHint":"The rewrite of the code itself is best done in the build, where a reviewer sees the diff: use the OpenRewrite recipes from the Camunda migration guide.","dataMigration":"Running instances and history","findingWhere":"{where}: {title}.","status":{"ready":"Ready","converts":"Converts","needsWork":"Needs work","blocked":"Blocked"},"meaning":{"ready":"nothing to do","converts":"Penstock converts it; the leftovers are a check","needsWork":"a person has to do part of it","blocked":"uses something Camunda 8 has no form for"},"effort":{"workers":"Job workers to write","expressions":"Expressions to rewrite","scripts":"Scripts to replace","listeners":"Listeners to move","forms":"Forms to rebuild or link","calledProcesses":"Called processes to check","decisions":"Decisions called"},"target":"Target: Camunda {target}. Written by Penstock{on}.","targetDated":"Target: Camunda {target}. Written by Penstock{on}.","dataMigrator":"Camunda's Data Migrator: {link}","fileCount":{"one":"{count} file","other":"{count} files"},"apiImports":"{api}: {imports} imports in {files}"},"rules":{"java-class":{"title":"Java class {className} becomes the job type {jobType}","detail":"Camunda 8 does not run Java inside the engine. A service task creates a job, and a job worker in your application picks it up.","action":"Write a job worker for {jobType}; Penstock generates one from the class."},"delegate-expression":{"title":"Delegate {delegate} becomes the job type {jobType}","detail":"Camunda 8 cannot look up a Spring bean. The task creates a job, and a job worker picks it up.","action":"Write a job worker for {jobType}; Penstock generates one from the bean."},"delegate-expression-dynamic":{"title":"The delegate is chosen by the expression {expression}","detail":"The bean is decided while the process runs, and a Camunda 8 job type is fixed or a FEEL expression over variables.","action":"Give the task a job type, or a FEEL expression that picks one from a variable."},"expression":{"title":"The expression {expression} becomes the job type {jobType}","detail":"Camunda 8 cannot call a bean method from the diagram. The call moves into a job worker.","action":"Write a job worker for {jobType} that makes the call {expression} made.","withResult":{"action":"Write a job worker for {jobType} that makes the call {expression} made and completes the job with the variable {result}."}},"expression-unknown":{"title":"The expression {expression} runs code inside the engine","detail":"Camunda 8 evaluates FEEL and nothing else in the diagram, so this expression has no counterpart.","action":"Move what it does into a job worker, or into a FEEL output mapping if it only computes a value."},"external-task":{"title":"The external task topic {topic} becomes the job type {jobType}","detail":"External tasks and jobs are the same idea. The worker changes client: the Camunda 7 external task client becomes a Camunda 8 job worker.","action":"Move the handler for {topic} to a job worker; Penstock generates one from the handler."},"external-task-priority":{"title":"The external task priority is dropped","detail":"Camunda 8 jobs of one type are handed out in the order they are created.","action":"Nothing to do, unless the order mattered; then give urgent work its own job type."},"connector":{"title":"The Camunda 7 connector {connector} has no Camunda 8 counterpart","detail":"Camunda 7 connectors (http-connector, soap-http-connector) are not part of Camunda 8. Camunda 8 has its own connectors, configured through element templates.","action":"Apply the Camunda 8 REST or SOAP connector template to the task, or write a job worker."},"field-injection":{"title":"The injected fields {fields} become task headers","detail":"Camunda 8 has no field injection. Fixed values travel with the job as custom headers, which the worker reads.","action":"Read them in the worker from the job's custom headers."},"field-injection-expression":{"title":"The injected field {field} is an expression","detail":"A task header is a fixed text; it cannot be evaluated while the process runs.","action":"Pass the value as an input mapping with a FEEL expression, and read it in the worker as a variable."},"async":{"title":"Asynchronous continuation is dropped","detail":"Camunda 8 has no transactions spanning steps: every job and every wait is its own unit, so asyncBefore and asyncAfter mean nothing there.","action":"Nothing to do."},"retries":{"title":"The retry cycle {cycle} becomes {retries} retries","detail":"Camunda 8 counts retries on the task; how long to wait between them is decided by the worker when it fails the job.","action":"Set the back-off in the worker's fail command if the interval mattered."},"retries-dropped":{"title":"The retry cycle {cycle} is dropped","detail":"Only tasks that create a job carry retries in Camunda 8.","action":"Nothing to do, unless this element relied on retrying; then check how it fails on Camunda 8."},"job-priority":{"title":"The job priority {priority} is carried over","detail":"Camunda 8 has job priorities from 8.8.","action":"Nothing to do."},"job-priority-dropped":{"title":"The job priority {priority} is dropped","detail":"The Camunda 8 version this converts for has no job priorities.","action":"Nothing to do, unless the order mattered; then give urgent work its own job type."},"input-output":{"title":"The input and output mapping becomes a FEEL mapping","detail":"Camunda 8 maps variables with FEEL expressions; each Camunda 7 parameter becomes one.","action":"Nothing to do."},"input-output-manual":{"title":"The mapping of {name} cannot be converted","detail":"{reason}","action":"Write the mapping as a FEEL expression."},"input-output-script":{"title":"The mapping of {name} runs a {format} script","detail":"Camunda 8 maps variables with FEEL only.","action":"Write the mapping as a FEEL expression, or compute the value in a job worker."},"condition":{"title":"The condition {expression} becomes {feel}","detail":"Camunda 8 conditions are FEEL expressions.","action":"Nothing to do."},"expression-review":{"title":"{expression} became {feel}","detail":"{reason}","action":"Check the FEEL expression means the same with the values this process sees."},"expression-manual":{"title":"The expression {expression} cannot be converted","detail":"The converter stopped because {reason}.","action":"Write it as a FEEL expression."},"script-condition":{"title":"The condition is a {format} script","detail":"Camunda 8 conditions are FEEL expressions only.","action":"Write the condition in FEEL."},"script-task":{"title":"The {format} script cannot run in Camunda 8","detail":"Camunda 8 runs a script task as a FEEL expression or as a job. Groovy, JavaScript and Python scripts have no engine to run in.","action":"Rewrite the script as a FEEL expression, or turn the task into a job worker that runs the code."},"script-task-feel":{"title":"The FEEL script becomes a FEEL expression","detail":"Camunda 8 runs a FEEL script task inside the engine, with its result in {variable}.","action":"Nothing to do.","noResult":{"title":"The FEEL script's result goes to {variable}","detail":"Camunda 8 needs a result variable for a FEEL script task, and the Camunda 7 task had none.","action":"Rename {variable} if something should read the result."}},"script-resource":{"title":"The script is read from {resource}","detail":"Camunda 8 does not load scripts from resources.","action":"Rewrite the script as a FEEL expression, or turn the task into a job worker."},"execution-listener":{"title":"The {event} listener {name} becomes the job type {jobType}","detail":"Camunda 8 execution listeners are jobs as well: the process waits until a worker completes them.","action":"Write a job worker for {jobType}; it runs before the element continues, so keep it quick."},"execution-listener-unsupported":{"title":"The {event} listener {name} has no Camunda 8 counterpart","detail":"{reason}","action":"Move what the listener does into a task of its own or into the worker before it."},"task-listener":{"title":"The {event} task listener {name} becomes the job type {jobType}","detail":"Camunda 8 task listeners are jobs that the user task waits for, and they can correct or deny what happens.","action":"Write a job worker for {jobType}."},"task-listener-unsupported":{"title":"The {event} task listener {name} has no Camunda 8 counterpart","detail":"{reason}","action":"Move what the listener does into a job worker around the task, or into the application that works the task."},"user-task":{"title":"The user task becomes a Camunda user task","detail":"Camunda 8 manages the task in the engine, with its assignee, candidates, dates and priority.","action":"Nothing to do in the diagram; the task list application changes to Tasklist or to the Camunda 8 user task API."},"user-task-expression":{"title":"The {name} {expression} became {feel}","detail":"{reason}","action":"Check the value on Camunda 8."},"user-task-priority-range":{"title":"The priority {priority} is outside 0 to 100","detail":"Camunda 8 user task priorities run from 0 to 100.","action":"Rescale the priority."},"user-task-priority-dropped":{"title":"The priority {priority} is dropped","detail":"The Camunda 8 version this converts for has no user task priority.","action":"Nothing to do, unless the task list sorted by it."},"form-embedded":{"title":"The embedded form {formKey} has no Camunda 8 counterpart","detail":"Camunda 8 Tasklist shows Camunda Forms only; HTML forms and their JavaScript do not carry over.","action":"Rebuild the form as a Camunda Form and link it, or keep your own task list application and pass the key as an external reference.","here":{"title":"The form key {formKey} has no Camunda 8 counterpart here"}},"form-generated":{"title":"The generated form becomes the Camunda Form {form}","detail":"Penstock writes a Camunda Form with one field per form field, and links it. Validation and properties the form fields had are carried over where Camunda Forms have them.","action":"Open {form} and check it looks and validates as the old one did."},"form-generated-partly":{"title":"Part of the generated form did not carry over: {lost}","detail":"Camunda Forms have no counterpart for it.","action":"Rebuild that part in the form editor."},"form-camunda":{"title":"The Camunda Form {form} is linked by its id","detail":"Camunda 8 links a form by its id and deploys it with the diagram.","action":"Deploy the form with the diagram."},"form-camunda-unknown":{"title":"The Camunda Form {form} was not found in the project","detail":"Camunda 8 links a form by the id inside it, and Penstock could not read that id. The file name was used instead.","action":"Check the form id in the diagram matches the id inside the form."},"form-binding-version":{"title":"The form is bound to version {version}","detail":"Camunda 8 binds a form by latest, by deployment or by version tag, not by version number.","action":"Bind it by deployment or give the form a version tag."},"form-external":{"title":"The form key {formKey} becomes an external reference","detail":"Camunda 8 passes an external reference through to the task list, as Camunda 7 passed the form key.","action":"Check your task list application reads the external reference."},"assignment-review":{"title":"The {name} {expression} is a list in Camunda 7","detail":"Camunda 8 wants candidates as a FEEL list or a comma-separated text.","action":"Check the expression gives a list or a comma-separated text."},"initiator":{"title":"The starter is kept in {variable} only in Camunda 7","detail":"Camunda 8 does not record who started an instance in a variable.","action":"Set {variable} as a variable when the process is started."},"multi-instance":{"title":"The multi-instance loop over {collection} becomes an input collection","detail":"Camunda 8 loops over an input collection, with each item in the input element.","action":"Nothing to do."},"multi-instance-cardinality":{"title":"The loop cardinality {cardinality} becomes a collection of numbers","detail":"Camunda 8 has no loop cardinality: it loops over a collection. The converter loops over the numbers 1 to {cardinality}.","action":"Check the loop runs as often as it did."},"multi-instance-missing":{"title":"The multi-instance loop has neither a collection nor a cardinality","detail":"Camunda 8 needs an input collection to loop over.","action":"Give the loop an input collection."},"call-activity":{"title":"The call of {process} carries over","detail":"Camunda 8 calls the process by its id; the variables passed in and out become mappings.","action":"Nothing to do."},"call-activity-business-key":{"title":"The business key is passed to {process}","detail":"Camunda 8 has no business key.","action":"Pass the value as a variable, and correlate messages on it."},"call-activity-local":{"title":"Only local variables were passed to or from {process}","detail":"Camunda 8 passes the variables its mappings name; it has no local-only mode.","action":"Check the mappings pass exactly what the called process needs."},"call-activity-mapping-class":{"title":"Variables for {process} are mapped by Java code","detail":"Camunda 8 maps variables with FEEL only.","action":"Write the mapping as FEEL input and output mappings."},"binding-version":{"title":"{what} is bound to version {version}","detail":"Camunda 8 binds by latest, by deployment or by version tag, not by version number.","action":"Bind it by deployment, or give the target a version tag and bind by that."},"binding-dropped":{"title":"The binding {binding} of {target} is dropped","detail":"The Camunda 8 version this converts for always takes the latest version.","action":"Convert for 8.6 or later to keep the binding."},"tenant":{"title":"The tenant {tenant} is fixed in the diagram","detail":"Camunda 8 decides the tenant from the deployment, not from the diagram.","action":"Deploy the diagram to the tenant instead."},"cmmn":{"title":"The case {case} is called","detail":"Camunda 8 has no CMMN.","action":"Model the case as a process, an ad-hoc subprocess or a set of user tasks."},"decision":{"title":"The decision {decision} is called, its result in {result}","detail":"Camunda 8 evaluates the decision in the engine and stores the whole result in one variable.","action":"Nothing to do."},"decision-result":{"title":"The decision result was mapped as {mapping}","detail":"Camunda 8 stores the result the way the decision gives it: one value for one output of one rule, a context for several outputs, a list for several rules. The Camunda 7 mapping {mapping} may have a different shape.","action":"Check what reads {result} expects the Camunda 8 shape."},"decision-result-variable":{"title":"The decision result goes to {result}","detail":"Camunda 8 needs a result variable, and the Camunda 7 task had none.","action":"Rename {result} if something else should read the result."},"message-catch":{"title":"The message {message} needs a correlation key","detail":"Camunda 8 correlates a message to a waiting instance by a key the instance computes from its variables. Camunda 7 correlated through the API, with the business key or variables.","action":"Add a correlation key to the message: a FEEL expression over a variable the sender also knows, such as =orderId."},"message-name-expression":{"title":"The message name {name} becomes {feel}","detail":"Camunda 8 message names can be FEEL expressions.","action":"Nothing to do."},"message-throw":{"title":"The message is sent by {implementation}, which becomes the job type {jobType}","detail":"Camunda 8 sends a message from a throw event through a job worker, like a send task.","action":"Write a job worker for {jobType} that publishes the message."},"message-throw-empty":{"title":"The message throw event has no implementation","detail":"Camunda 8 needs a job type on a message throw event; a worker sends the message.","action":"Give the event a job type and write the worker that publishes the message."},"signal-variables":{"title":"Variables passed with the signal {signal}","detail":"Camunda 8 broadcasts a signal with the variables its input mappings give it.","action":"Check the signal carries the variables its catchers read."},"timer":{"title":"The timer {timer} carries over","detail":"Camunda 8 reads the same ISO 8601 dates, durations and cycles.","action":"Nothing to do."},"timer-cron":{"title":"The timer cycle {cycle} is a cron expression","detail":"Camunda 8 reads cron expressions in the Spring format; Camunda 7 read them in the Quartz format, which allows fields Spring does not.","action":"Check the cron expression is valid Spring cron."},"error-code-variable":{"title":"The caught error code goes to {variable} through an output mapping","detail":"Camunda 8 gives a caught error to the output mappings as errorCode and errorMessage.","action":"Nothing to do."},"error-message":{"title":"The error message {message} is dropped","detail":"In Camunda 8 the worker that throws the error gives its message.","action":"Give the message in the worker when it throws the error."},"external-error":{"title":"The external task decides errors by the expression {expression}","detail":"Camunda 8 has no error event definitions on a task; the job worker throws the error itself.","action":"Throw the BPMN error from the job worker when the condition holds."},"escalation-code-variable":{"title":"The escalation code was kept in {variable}","detail":"Camunda 8 does not store a caught escalation code in a variable.","action":"Pass the value as a variable when the escalation is thrown."},"unsupported-element":{"title":"Camunda 8 cannot run a {what}","detail":"{reason}","action":"{action}"},"element-since":{"title":"A {what} needs Camunda {version} or later","detail":"The Camunda 8 version this converts for, {target}, cannot run it.","action":"Convert for Camunda {version} or later, or remodel it."},"conditional-event":{"title":"The conditional event waits for {variables}","detail":"Camunda 8 evaluates a condition when the variables it names change, like Camunda 7 did when variableName was set.","action":"Check the condition is triggered by the variables you expect."},"properties":{"title":"The extension properties carry over","detail":"Camunda 8 keeps them as zeebe properties, read the same way by tools.","action":"Nothing to do."},"version-tag":{"title":"The version tag {tag} carries over","detail":"Camunda 8 keeps version tags from 8.6.","action":"Nothing to do.","dropped":{"title":"The version tag {tag} is dropped","detail":"Camunda 8 keeps version tags from 8.6."}},"history-time-to-live":{"title":"The history time to live {ttl} is dropped","detail":"Camunda 8 keeps history in its secondary storage, cleaned up by retention settings of the cluster, not of the diagram.","action":"Set the retention in the cluster configuration if it mattered."},"starter-groups":{"title":"Who may start the process ({groups}) is dropped","detail":"Camunda 8 decides who may start a process through authorizations, not the diagram.","action":"Grant the start permission to {groups} in Camunda 8 identity."},"startable-in-tasklist":{"title":"Whether Tasklist may start the process is dropped","detail":"Camunda 8 Tasklist offers every process a user may start.","action":"Nothing to do."},"template":{"title":"The element template {template} is a Camunda 7 template","detail":"The template no longer applies; the converted properties stay.","action":"Apply the Camunda 8 version of the template, if there is one."},"unknown-attribute":{"title":"The Camunda 7 setting {attribute} is left as it is","detail":"Penstock does not know what Camunda 8 should do with it, so it stays in the diagram, where Camunda 8 ignores it.","action":"Check whether anything depended on it, then remove it."},"dmn-version":{"title":"The decisions are DMN {version}","detail":"Camunda 8 reads DMN 1.3. Penstock and the DMN editor move an older file to 1.3.","action":"Open the file in the DMN editor and save it, then convert it.","converted":{"detail":"Camunda 8 reads DMN 1.3, so the file is written as DMN 1.3.","action":"Nothing to do."}},"dmn-expression-language":{"title":"{what} is written in {language}","detail":"Camunda 8 evaluates DMN in FEEL only.","action":"Write it in FEEL."},"dmn-juel":{"title":"{what} becomes the FEEL expression {feel}","detail":"Camunda 8 evaluates DMN in FEEL only.","action":"Nothing to do."},"dmn-input-variable":{"title":"The input {input} names its value {variable}","detail":"Camunda 8 refers to the input value in a rule as ?, not by a name.","action":"Replace {variable} with ? in the rules of this input, then remove the name."},"dmn-history-time-to-live":{"title":"The history time to live of {decision} is dropped","detail":"Camunda 8 keeps history in its secondary storage, cleaned up by retention settings of the cluster.","action":"Nothing to do."},"dmn-carries-over":{"title":"The decisions carry over","detail":"Camunda 8 evaluates DMN 1.3 in FEEL, and these decisions use nothing else.","action":"Nothing to do."},"form-platform":{"title":"The form carries over","detail":"Camunda Forms have the same format on both; only the platform it names changes.","action":"Nothing to do."},"platform":{"title":"The diagram names Camunda {target} as its platform","detail":"Camunda Modeler and Penstock read the platform from the file.","action":"Nothing to do."},"data-migration":{"title":"Running instances and history stay on Camunda 7","detail":"Converting a diagram does not move its instances. Instances can finish on Camunda 7, or be moved with Camunda's Data Migrator, which needs the element ids to stay as they are; the converter keeps them.","action":"Decide whether to drain Camunda 7 or to run the Data Migrator."}},"dmn":{"savedAsNotice":"{name} is a DMN {from} file. It was converted to DMN 1.3 and will be saved as DMN 1.3 when you change it."},"form":{"keptOut":"{name} on {id}","lostType":"type {type} of {id}"},"tally":{"toDo":{"one":"{count} to do","other":"{count} to do"},"toCheck":{"one":"{count} to check","other":"{count} to check"},"converts":{"one":"{count} convert unchanged","other":"{count} convert unchanged"}},"selection":{"refused":{"unknown":"These ids are not in the migration plan: {ids}","too-many":"The selection lists too many ids (the limit is 20000). Nothing was written.","too-long":"An id in the selection is empty or longer than 1024 characters. Nothing was written.","empty":"The list of ids to accept is empty, so there is nothing to apply. Nothing was written."},"unsafeFile":"The saved selection is not a plain file inside the project, so it was not read.","tooBig":"The saved selection is too large to read.","unreadable":"The saved selection is not a valid Penstock selection file, so it was ignored."},"risk":{"automatic":"Converted automatically","changed":"Converted, meaning changed","person":"Needs a person","left":"Left as is"},"proof":{"verdict":{"equivalent":"EQUIVALENT","differs":"DIFFERS","notComparable":"NOT COMPARABLE"},"side":{"original":"Original (Camunda 7)","converted":"Converted (Camunda 8)"},"reason":{"left-as-is":"Element {element} was left as is by the conversion: {detail}","needs-person":"Element {element} needs a person to finish its conversion: {detail}","element-removed":"Element {element} no longer exists in the converted diagram.","delegate-unavailable":"Element {element} calls a Java delegate that cannot run on both engines without a mock for it.","run-failed":"The scenario could not be run: {detail}","unreadable-case":"The scenario file could not be read: {detail}","unreadable-trace":"A run trace could not be read, so nothing can be compared: {detail}","no-diagram":"The diagram for this scenario file was not found.","no-converted":"There is no converted diagram for this scenario file.","executable-not-confirmed":"The conversion adds executable content and it was not confirmed.","cancelled":"The run was cancelled.","unrunnable":"The scenario cannot be run on a test engine: {detail}"},"divergence":{"element":"Step {index}: the original goes to {original}, the converted one to {converted}.","outcome":"The original ended as {original}, the converted one as {converted}. {message}","state":"The original finished in state {original}, the converted one in state {converted}.","incident":"Incidents differ: original {original}; converted {converted}.","variable":"Variable {name}: original {original}, converted {converted}."},"noValue":"(not set)","noTrace":"(no trace)","theEnd":"(the end)","none":"none","hiddenNames":"values hidden for: {names}","totals":"{equivalent} equivalent, {differs} differ, {notComparable} not comparable","orderNote":"Parallel branches ran in a different order; the order was not compared.","originalTrace":"Original trace","convertedTrace":"Converted trace","defaultProfile":"default profile","caseFileUnreadable":"the file could not be read","idMapUnreadable":"the conversion could not be mapped element by element","unreadableFile":"a file that could not be inspected","refused":"Nothing was run.","ranUnreviewed":"Ran with {count} added executable item(s) that you chose not to review first.","noScenarios":"No scenarios were found to run.","freePreview":"Free preview: {shown} of {total} scenarios were run.","skippedFile":"Skipped {file}: it is a symbolic link or outside the project.","refusal":{"noEngine":"No engine is set up for the {side} diagram (profile: {profile}).","wrongFamily":{"original":"The engine {engine} is not a Camunda 7 family engine (Camunda 7, Operaton, CIB seven), so it cannot run the original diagram.","converted":"The engine {engine} is not a Camunda 8 engine, so it cannot run the converted diagram."},"notForTests":"The {side} engine ({where}) is not marked for tests (deployment.forTests: true), so nothing is run on it. Shared and production engines are never used.","sameEngine":"Both profiles point at the same engine; the original and the converted diagram need one each.","needConverted":"Name the profile of the Camunda 8 test engine (--converted-profile).","nothing":"There is nothing to convert and compare in this project.","executable":"The conversion adds executable content that the original did not have: {list} ({count} in all). Nothing was run.","executableHint":"Review what was added, then run again with --run-unreviewed (or the button in the Migration workspace) to confirm that you accept running it on the test engine."}},"workspace":{"title":"Migration workspace","help":"Every change the conversion to Camunda 8 would make, per file and per element, with what it is now, what it becomes and why. Tick the ones to accept. Nothing is written until you choose Apply selected.","loading":"Reading the project…","failed":{"title":"The migration plan could not be made","hint":"Check that the project folder can be read, then reopen this screen."},"empty":{"title":"Nothing to migrate","hint":"The project has no Camunda 7 diagrams, decisions or forms left to convert."},"summary":"{accepted} of {total} changes accepted. About {hours} h of work left by hand.","acceptAll":"Accept all","rejectAll":"Reject all","save":"Save selection","apply":"Apply selected","saved":"Selection saved in .penstock/migration-selection.json.","saveFailed":"The selection could not be saved.","outcome":{"applied":"The accepted changes were written.","cancelled":"Nothing was written.","locked":"Writing the migration is part of Penstock Pro. Nothing was written.","nothing":"The accepted changes leave nothing to write.","refused":"Nothing was written; a file changed or could not be replaced."},"kind":{"element":"Element","file":"Whole file","create":"New file","config":"Project settings"},"before":"Before","after":"After","accept":"Accept the change to {name}","acceptFile":"Accept every change in {file}","open":"Show {name} in the diagram","noChanges":"Nothing is rewritten here; it stays as it is and needs your attention.","proof":{"title":"Run the same scenarios on both engines","help":"Runs the saved scenarios of the project on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and compares what happened. Only engines marked for tests are used.","noEngines":"Mark a Camunda 7 engine and a Camunda 8 engine for tests in penstock.yaml (deployment.forTests: true) to compare them here.","originalEngine":"Camunda 7 test engine","convertedEngine":"Camunda 8 test engine","scenarios":"Scenario files (optional)","run":"Run the same scenarios","stop":"Stop","running":"{count} scenarios compared so far","failed":"The run stopped: {reason}","executable":{"title":"The conversion adds executable content","run":"Run it anyway on the test engine"},"ranUnreviewed":"Ran with executable content added by the conversion, as you confirmed.","unlock":"Unlock all scenarios"}}},"notifications":{"closeNotification":"Close notification"},"platform":{"theConversionPreviewStayedUnanswered":"The conversion preview stayed unanswered for {seconds} seconds, so Penstock stopped asking and converted nothing.","theConversionPreviewWasGiven":"The conversion preview was given up before the user answered, so Penstock converted nothing.","theHostConnectionIsClosed":"The host connection is closed","theIdeAnswered":"The IDE answered {status}","theRequestWasCancelled":"The request was cancelled"},"problems":{"waiting":"Waiting for a diagram to check.","tally":{"one":"{count} problem","other":"{count} problems"}},"project":{"applied":"Migration applied: {rewritten} files rewritten, {created} created, {manual} need a person. MIGRATION.md has the list.","applyChanged":"{file} changed since it was read","applyDecline":"Cancel","applyAccept":"Apply","applyText":"This rewrites {rewritten} files in place and creates {created} files, among them the job worker skeletons and MIGRATION.md. {converted} elements are converted and {manual} need a person afterwards. Nothing is deleted. Commit first so the change can be undone.","applyTitle":"Apply the migration for Camunda {target}","applyNothingToWrite":"Nothing to apply: the Camunda 7 files here are already converted.","chooseCamunda7Camunda8":"Choose Camunda 7, Camunda 8, Operaton or CIB seven as the engine in penstock.yaml to deploy","filesReplaced":{"one":"{count} file replaced.","other":"{count} files replaced."},"isBesideTheDelegateMove":"{fileName} is beside the delegate; move what {value} does into it.","isNotACamunda7":"{name} is not a Camunda 7 file: there is nothing to convert.","noJobWorkerWasFound":"No job worker was found for {asked}.","notRunTheEngineWas":"Not run: the engine was not confirmed for tests","nothingWasWritten":"Nothing was written: {failure}","penstockWillDeployATest":"Penstock will deploy a test build to {url}, start instances and answer the jobs it mocks. ","runScenariosOnThisEngine":"Run scenarios on this engine?","startFromAnExample":"Start from an example","templateUpdated":"The element template for {value} was brought up to date from {where} in {path}.","templateWritten":"The element template for {value} was written from {where} to {path}.","theBuildAndItsInstances":"The build and its instances are removed after each run. Mark the profile with deployment.forTests: true to stop being asked.","theElementTemplateForAlready":"The element template for {value} already says what {where} does.","theElementTemplateIsNot":"The element template {id} is not in this project any more.","theExampleIsInIts":"The {example} example is in {root}. Its README.md says how to run it.","theExampleWasNotWritten":"The example was not written: {failure}","theJobWorkerWasNot":"The job worker was not written: {failure}","theMigrationReportIsIn":"The migration report is in .penstock/migration: report.md, and report.html to hand on.","theWorkerSkeletonWasNot":"The worker skeleton was not written: {failure}","thereIsNothingToMigrate":"There is nothing to migrate: no Camunda 7 diagram, decision or form was found.","thingsStayOpen":{"one":"{count} thing stays open, marked on its element; the Camunda 7 file is unchanged.","other":"{count} things stay open, each marked on its element; the Camunda 7 file is unchanged."},"wasConvertedForCamundaInto":"{name} was converted for Camunda {target} into {folder}.","wasWrittenForInMove":"{fileName} was written for {name} in {inside}. Move what it should do into it.","writeTheOrderExampleInto":"Write the {example} order example into {root}? It adds a process, a decision, a form, workers, test cases and a README, and never overwrites a file.","couldNotBeRead":"{name} could not be read: {reason}","notADiagramDecisionOrForm":"it is not a diagram, decision or form","alreadyThere":{"one":"{files} is already there; choose to replace it or another folder","other":"{files} are already there; choose to replace them or another folder"},"theCursorIn":"the cursor in {file}","theJobType":"the job type {value}","engine":{"CAMUNDA_8":"Modern cloud-native process automation platform","OPERATON":"Community-driven BPMN automation platform","CIB_SEVEN":"Community fork of Camunda 7","CAMUNDA_7":"Proven workflow and decision automation platform","CLASSIC_BPMN":"Standard BPMN 2.0 modeling without engine-specific extensions"},"scriptType":{"noScriptTypeSelected":"No script type selected","groovyScriptingLanguage":"Groovy scripting language","javaScriptScriptingLanguage":"JavaScript scripting language","Groovy":"Groovy","JavaScript":"JavaScript"},"noScriptType":"<empty>"},"properties":{"calledElement":"Called element","dataObject":"Data object","editInNewTab":"Edit in new tab","exampleOutputWritten":"Example output written","idOfTheProcessTo":"Id of the process to call","isACollection":"Is a collection","leaveEmptyForTheEngine":"Leave empty for the engine default","loopCondition":"Loop condition","loopMaximum":"Loop maximum","loopMaximumWholeNumber":"The loop maximum should be a whole number","testBefore":"Test before","tryOnInstance":"Try on instance","writeExampleOutput":"Write example output","writeThisAsTheExample":"Write this as the example output, where Camunda Modeler reads it","readingWhatReachesThisStep":"Reading what reaches this step","nothingReachesThisStep":"Nothing reaches this step, so there is no example output to write.","anyValue":"any","pickAnInstanceToRunThis":"Pick an instance in the Monitor tab to run this on its variables.","projectVariable":"Used in the project","sevenCannotEvaluate":"Camunda 7 cannot evaluate an expression. It needs Camunda 8.9 or newer.","showScriptTab":"Show tab","scriptInTab":"This script is open in a tab"},"runs":{"adHocRun":"Ad-hoc run {time}","addAScenarioWithChosen":"Add a scenario with chosen inputs","addScenario":"Add scenario","addTheVariablesTheScenario":"Add the variables the scenario starts with.","addWhichAGatewayCondition":"Add {name}, which a gateway condition reads","backTo":"Back to {value}","buyOrSignIn":"Buy or Sign In","changed":"Changed","checkAtTheEnd":"Check at the end","choice":{"job":{"ask":"Ask me","complete":"Complete","error":"Throw error","fail":"Fail, then complete","real":"Real worker"},"timer":{"fire":"Fire now","real":"Wait for it"}},"chooseAProcess":"Choose a process","chooseTheValuesThatTake":"Choose the values that take the way you want. The gateways read {names}.","conditionOf":"Condition of {name}","create":"Create","createScenarios":"Create scenarios","createThisScenario":"Create this scenario","decisionRule":"Decision rule","enterANameForThe":"Enter a name for the scenario","enterTheErrorCodeShould":"Enter the error code {name} should throw","enterTheKeyOrId":"Enter the key or id of a process instance","errorCode":"Error code","fillTheForm":"Fill the form","answerTimer":"Answer timer","mockWorker":"Mock worker","fireTimer":"Fire timer","advanceTimeBy":"Advance time by","timerFired":"Timer is set to fire","timerDurationProblem":"Write the time as an ISO 8601 duration, such as PT2H or P1D","removeTimerAnswer":"Do not fire","workerOutcome":"Outcome","completeJob":"Complete job","throwBpmnError":"Throw BPMN error","failJob":"Fail job","workerVariables":"Variables (JSON)","errorMessage":"Error message","saveMock":"Save mock","removeMock":"Remove mock","invalidJson":"The variables should be a JSON object, such as {\\"amount\\": 150}","generate":"Generate","in":"In","include":"Include {name}","kind":{"call":"Call","decision":"Decision","delegate":"Delegate","end":"End","error":"Error","eventGateway":"Wait","gateway":"Gateway","join":"Join","message":"Message","parallel":"Split","signal":"Signal","start":"Start","subprocess":"Sub-process","task":"Task","timer":"Timer","user":"User task","worker":"Worker"},"leaveItEmptyToName":"Leave it empty to name the scenario after its way.","mocked":"Mocked","name":"Name","nameOfTheScenario":"Name of the scenario","nextStep":"Next step","noDecisionTableWithId":"No decision table with the id {id} is in this project","noFormWithTheId":"No form with the id {id} is in this project","noScenarioFile":"No scenario file","noScenariosAdded":"No scenarios added.","notTakenByThisScenario":"Not taken by this scenario","openRun":"Open run","out":"Out","penstockCannotCheckThisExpression":"Penstock cannot check this expression here","penstockFailed":"Penstock failed: {message}","previousStep":"Previous step","process":"Process","processInstance":"Process instance","removeVariable":"Remove {name}","resizeTheRunsPanel":"Resize the runs panel","reviewScenarios":"Review scenarios","run":"Run","runOutput":"Run output","runWithInput":"Run with input","runningNeedsAnEngineSet":"Running needs an engine. Set up the deployment profile in force.","saveAsScenario":"Save as scenario","scenariosIn":"Scenarios in {file}","scenariosNeedAnEngine":"Scenarios need an engine.","scenariosRunACamunda7":"Scenarios run a Camunda 7 or Camunda 8 process on an engine and follow every step. This diagram has no engine set.","scenariosToCreate":"Scenarios to create","source":{"decision":"from the decision evaluation","diff":"changed between two readings; the engine does not say which step wrote it","history":"from the engine history","mock":"sent or received by the mock"},"startVariables":"Start variables","startsAt":"Starts at","state":{"completed":"completed","active":"waiting","failed":"failed","terminated":"ended early"},"step":"Step","stepBadge":"Step {number}: {name}","steps":"Steps","theDiagramHasNoExecutable":"The diagram has no executable process to start","theKeyOfACamunda":"The key of a Camunda 8 instance or the id of a Camunda 7 one. Reads the instance from the engine of the profile in force and shows its path and steps. Nothing is changed on the engine.","thePlainStartEvent":"The plain start event","theRunDiffersFrom":{"one":"The run differs from {against} in 1 place.","other":"The run differs from {against} in {count} places."},"theRunMatches":"The run matches {against}.","theRunWaits":"The run waits","theScenarioAnsweredThisStep":"The scenario answered this step; no real code ran","theScenarioAsItIs":"The scenario as it is written","theScenarioStartsTheProcess":"The scenario starts the process with the same variables, answers the steps the way you did and checks the path the run took.","theScenarioStartsTheProcessInto":"The scenario starts the process with the same variables, answers the steps the way you did and checks the path the run took. It goes into {file}.","theStartVariablesShouldBe":"The start variables should be a JSON object, such as {\\"amount\\": 150}","theVariable":"the variable","theVariablesSendsShouldBe":"The variables {name} sends should be a JSON object","theWayThisScenarioTakes":"The way this scenario takes","theseValuesTake":"These values take: {scenario}","timesToFail":"Times to fail","toFillIn":"To fill in","unableToSaveTheScenario":"Unable to save the scenario","unableToWrite":"Unable to write {name}: {error}","theScenarioFile":"the scenario file","unreadable":"The diagram cannot be read right now, so its scenarios cannot be planned.","userTasksAndMessagesAsk":"User tasks and messages ask you when the run reaches them. A mocked step is marked Mocked: no real code ran there.","valueOf":"Value of {name}","variableName":"Variable name","variablesAreAJsonObject":"Variables are a JSON object, such as {\\"approved\\": true}","variablesSends":"Variables {name} sends","view":"View","whatDoes":"What {name} does","withErrorCode":"with error code","writeThisScenarioToThe":"Write this scenario to the file when you press Create scenarios","conditionsOnTheWayOut":"Conditions on the way out","goToTheWorker":"Go to the worker","showTheDecisionRule":"Show the decision rule","openTheDecision":"Open the decision","goToTheForm":"Go to the form","received":"Received","variablesToSend":"Variables to send","correlate":"Correlate","throwError":"Throw error","stop":"Stop","runAll":"Run all","close":"Close","log":"Log","penstockOnlyCamundaProcessTestWould":"Penstock only: Camunda Process Test would run it differently","alreadyInTheFileKeptAs":"Already in the file: kept as it is","added":"Added","text":"Text","saveChanges":"Save changes","generateThemFromTheDiagram":"Generate them from the diagram","openScenario":"Open scenario","scenarios":"Scenarios","addAValue":"Add a value","saveAsScenarioMore":"Save as scenario…","theJob":"the job {job}","theUserTask":"the user task","theMessage":"the message {message}","theSignal":"the signal {signal}","waitingAtFor":"Waiting at {where} for {what}","aScenarioIsOpen":"A scenario is open in the sidebar","noConditionAlwaysTaken":"no condition: this branch is always taken when it is reached","chooseVariablesSoThat":"choose variables so that {text}","trueOrFalseForTheValues":"{result} for the values of this scenario{used}","true":"true","false":"false","shouldFailAWholeNumberOfTimes":"{name} should fail a whole number of times, at least once","toCreate":"{ticked} of {items} to create","cannotBePlanned":{"one":", {count} cannot be planned","other":", {count} cannot be planned"},"moreWaysThanShown":{"one":"More than {count} ways lead through this process: the scenarios below together reach every flow.","other":"More than {count} ways lead through this process: the scenarios below together reach every flow."},"scenariosAdded":{"one":"{count} scenario added","other":"{count} scenarios added"},"toFillInCount":{"one":"{count} to fill in","other":"{count} to fill in"},"alreadyThereAndKept":{"one":"{count} already there and kept","other":"{count} already there and kept"},"leftAsItIs":"{file}: the file is left as it is: {problems}","scenariosSaved":{"one":"{count} scenario saved","other":"{count} scenarios saved"},"nameTaken":"{name} already has a scenario named \\"{scenario}\\": choose another name","errorNeedsItsCode":"A BPMN error needs its error code","complete":"Complete","broadcast":"Broadcast","runWithInputMore":"Run with input…","openRunMore":"Open run…","runAllIsOff":"Run all is off: {reason}","noEngineToRunOn":"there is no engine to run on.","noScenariosToRunYet":"There are no scenarios to run yet. Generate them in the Scenarios tab of the sidebar.","theTraceIsKeptIn":"The trace is kept in {path}","openARunMore":"Open a run…","theFile":"the file","notOnThisScenariosPath":"That element is not on this scenario's path.","planningTheScenarios":"Planning the scenarios…","noWayThroughAProcess":"No executable process here has a way through it that starts at a plain start event.","hideTheConditions":"Hide the conditions","fixTheConditions":"Wrong way? Fix the conditions","readOnlyEditingIsPro":"Read-only: editing a scenario is part of Penstock Pro.","aChangeIsMadeInThe":"A change is made in the diagram, can be undone there, and every scenario is planned again.","defaultFlowNoCondition":"default flow, no condition","decisionTableNotInProject":"The decision table {id} is not in this project, so its rules cannot be shown.","formNotInProject":"The form {id} is not in this project, so its fields cannot be shown.","openTheDecisionIn":"Open the decision in {file}","itsFile":"its file","problemCount":{"one":"1 problem","other":"{count} problems"},"startedByAnEvent":" (started by an event)","notice":{"added":{"one":"{count} scenario added","other":"{count} scenarios added"},"toFillIn":"{count} to fill in","kept":"{count} already there and kept","leftAsIs":"{file}: the file is left as it is: {problems}","saved":{"one":"{count} scenario saved","other":"{count} scenarios saved"},"duplicated":"Duplicated as {name}","deleted":"Deleted {name}","renamedTo":"Renamed to {name}"},"stateColumn":"State","noScenariosHint":"A scenario runs the process with the input you choose and checks the path it takes.","scenarioActions":"Scenario actions","rename":"Rename","duplicate":"Duplicate","deleteScenario":"Delete scenario","deleteScenarioTitle":"Delete scenario {name}?","deleteScenarioText":"{name} is removed from {file}. This cannot be undone."},"share":{"couldNotShareThisDiagram":"Could not share this diagram: {failure}","oneFileThatOpensOffline":"One file that opens offline in any browser","savedItOpensOfflineIn":"Saved {target}. It opens offline in any browser.","shareAsHtml":"Share as HTML","zoomIn":"Zoom in","zoomOut":"Zoom out","fitToScreen":"Fit to screen","madeWith":"Made with Penstock","elementDocumentation":"Element documentation","clickAnElement":"Click an element for its documentation. Scroll to zoom, drag to pan.","noDocumentation":"No documentation.","couldNotBeDrawn":"The diagram could not be drawn, so there is nothing to share."},"shortcuts":{"group":{"Canvas":"Canvas","Edit":"Edit","Modeling":"Modeling","Penstock":"Penstock"},"noMatch":"Nothing matches that.","noMatchHint":"Clear the search to see every shortcut again.","row":{"canvas-find":"Find in the diagram","canvas-fit":"Fit diagram","canvas-moveSelection":"Move the selection","canvas-pan":"Pan the canvas","canvas-selectAll":"Select all elements","canvas-zoomIn":"Zoom in","canvas-zoomOut":"Zoom out","edit-copy":"Copy","edit-cut":"Cut","edit-duplicate":"Duplicate","edit-paste":"Paste","edit-redo":"Redo","edit-remove":"Delete the selection","edit-undo":"Undo","model-connect":"Connect","model-direct-edit":"Edit a label","model-hand":"Hand tool","model-lasso":"Lasso select","model-replace":"Replace an element","model-space-tool":"Space tool","penstock-palette":"Find action"},"search":"Search actions and keys","title":"Keyboard shortcuts"},"sidebar":{"backTo":"Back to {title}","clickOrPressF2To":"{title} - click or press F2 to rename","collapseTheSidebar":"Collapse the sidebar","collapsedLabel":"{title}, collapsed","openTheSidebar":"Open the sidebar","pressF2OrEnterTo":"{title}. {label}: press F2 or Enter to rename","resizeTheSidebar":"Resize the sidebar","sidebar":"Sidebar","tab":{"code":"Code","comments":"Comments","monitor":"Monitor","preview":"Preview","problems":"Problems","properties":"Properties","scenarios":"Scenarios","try":"Try","debug":"Debug","chat":"Chat","aiagents":"Agents","tests":"Tests"},"findingCount":{"one":"{count} finding","other":"{count} findings"},"moreThan99Findings":{"one":"more than 99 finding","other":"more than 99 findings"},"status":{"working":"Agent working","waiting":"Waiting for you"},"moreTabs":"More tabs"},"startup":{"retryingReloadsTheEditorAnd":"Retrying reloads the editor and reads the project again.","theEditorCouldNotStart":"The editor could not start"},"toolbar":{"moreActions":"More actions","moreActionsHint":"More actions ({shortcut})","moreWaysTo":"More ways to {title}"},"nudges":{"price":"{monthly} a month or {yearly} a year","trialEnded":{"text":"Your Pro trial ended. Penstock Free continues, with no time limit, and nothing is lost: your diagrams and files are untouched. Locked until you go Pro: {features} and the other Pro tools. Pro is {price}.","start":"Start with Pro","later":"Remind me later"},"lastDay":{"text":"Last day of your Pro trial. Tomorrow the Pro tools lock; your diagrams and everything in Free keep working, with no time limit. Pro is {price}.","start":"Start with Pro"},"day23":{"text":{"one":"Your Pro trial ends in {count} day. After that Penstock stays free, with no time limit; only the Pro tools lock, such as {features}.","other":"Your Pro trial ends in {count} days. After that Penstock stays free, with no time limit; only the Pro tools lock, such as {features}."},"action":"See Pro plans"},"freeNotice":{"text":"Penstock is free, with no time limit. The editors, Check, Deploy, Monitor, sharing and importing, and the Camunda 7 to 8 analysis stay free, and so does the visual diagram diff in version control. Pro adds tools that are new: {features} and the other Pro tools. {trial}","trialRunning":"Your {days}-day Pro trial is running.","trialEnded":"Your Pro trial has ended; Free continues.","action":"See what's Pro"},"trialWelcome":{"lead":{"one":"Try every Pro feature free for {count} day.","other":"Try every Pro feature free for {count} days."},"text":"{lead} Penstock Free stays free, with no time limit: the editors, Check, Deploy, Monitor and the rest of Free keep working after the trial, and nothing is lost. If you like Pro, you can subscribe at any time.","action":"See Pro plans"}},"tour":{"check":{"body":"The check runs as you draw. Check opens what it found: the first findings are in a card at the bottom right, and the full list is on the Problems tab.","title":"Check"},"deploy":{"body":"Deploy sends the diagram to your engine. {profiles}","title":"Deploy"},"done":"Done","label":"Tour of the editor","more":{"body":"Every action is in More, and {shortcut} opens the same list. Type to find one; the pin puts an action on the toolbar. The tour can be shown again from here.","title":"More"},"next":"Next","palette":{"body":"Pick a shape here and drop it on the canvas, or select a shape and use the pad that appears beside it.","title":"Palette"},"profileChoice":"The arrow next to it picks another profile, or opens the connection.","properties":{"body":"Select a shape and its properties open here: name, implementation, inputs and outputs. The sidebar has eight more tabs beside it, and the last button on the toolbar hides them all.","title":"Properties panel"},"singleProfile":"It opens the connection when the engine has none yet.","skip":"Skip","step":"Step {index} of {total}","tool-window":{"body":"The Penstock tool window is on the stripe at the side of the IDE. It lists the processes, workers, element templates, messages, decisions and forms of the whole project.","title":"Tool window"}},"tracePaths":{"closeTrace":"Close trace","followMessageFlows":"Follow message flows","tracePaths":"Trace paths","tracingBeforeAfter":"Tracing {label} - {before} before, {after} after"},"transactionBoundaries":{"transactionBoundaryTheEngineCommits":"Transaction boundary: the engine commits here"},"try":{"aggregated":", {aggregation} of the matches","aggregation":{"COUNT":"Count","MAX":"Largest","MEAN":"Average","MEDIAN":"Middle","MIN":"Smallest","MODE":"Most often","SUM":"Sum"},"policy":{"ANY":"Any: several rules may match if they give the same result","COLLECT":"Collect: every matching rule contributes","FIRST":"First: the first matching rule wins","OUTPUT ORDER":"Output order: every matching rule, by output priority","PRIORITY":"Priority: the matching rule with the highest output priority wins","RULE ORDER":"Rule order: every matching rule, in rule order","UNIQUE":"Unique: exactly one rule may match"},"shouldBe":"{name} should be {wanted}","aValueOf":"a {type}","value":"value","aNamePenstockCanRead":"a name Penstock can read","penstockCannotEvaluateHere":"{why}; Penstock cannot evaluate this cell here: {cells}","needsAValueFor":"needs a value for {names}","tableNeeds":"{table} {skipped}","tableNeedsAValueFor":"{table} needs a value for {names}","cannotEvaluateTheseCells":"Penstock cannot evaluate this cell here: {cells}","noRuleWasCompared":"{table}: {names}, so no rule was compared"},"unreadable":{"note":{"decision":"The file was not changed. Fix the XML in the Text tab and the decision opens again.","diagram":"The file was not changed. Fix the XML in the Text tab and the diagram opens again.","form":"The file was not changed. Fix the JSON in the Text tab and the form opens again."},"open":{"decision":"Open the XML","diagram":"Open the XML","form":"Open the file"},"title":{"decision":"This decision cannot be opened","diagram":"This diagram cannot be opened","form":"This form cannot be opened"},"atLine":"{reason} at line {line}.","reason":{"unclosedTag":"unclosed tag","closingTagMismatch":"closing tag mismatch","closeTag":"close tag","missingStartTag":"missing start tag","missingOpenTag":"missing open tag","unexpectedEndOfFile":"unexpected end of file","unclosedCdata":"unclosed cdata","unclosedComment":"unclosed comment","unclosedQuestion":"unclosed question","illegalFirstCharNodeName":"illegal first char nodeName","illegalValueOfXmlnsXml":"illegal value of xmlns:xml","invalidNodeName":"invalid nodeName","missingNamespaceOn":"missing namespace on <{element}>","unparsableContent":"unparsable content <{element}> detected","notYetDrawn":"element {element} referenced by {reference}#{property} not yet drawn","unparsableContentHinted":"unparsable content <{element}> detected; this may indicate an invalid BPMN 2.0 diagram file","noDiagramToDisplay":"the file has no diagram interchange, so there is nothing to draw","empty":"the file is empty"}},"tooltip":{"inputOutputParameters":"Input/Output Parameters","script":"Script","subprocess":"Subprocess","serviceTask":"Service Task","assignment":"Assignment","properties":"Properties","inTheProject":"In the project","in":"IN: {number}","out":"OUT: {number}","inOf":"IN ({number})","outOf":"OUT ({number})","elements":"Elements:","id":"ID:","notSet":"<not set>","implementation":"Implementation","class":"Class","delegate":"Delegate","assignee":"Assignee","groups":"Groups","users":"Users","itemsCount":"[{number} items]"},"dialog":{"exampleHint":"e.g. {example}"},"toolWindow":{"action":{"applyMigration":"Apply the migration in place…","buyOrSignIn":"Buy or Sign In…","checkWorkersOn":"Check Workers on {where}","checkWorkersOnEngines":"Check Workers on the Engines","convertAll":"Convert All…","convertToCamunda8":"Convert to Camunda 8…","copyId":"Copy ID","createElementTemplate":"Create Element Template…","createExample":"Create the Example","createJobWorker":"Create Job Worker…","createNodeWorker":"Create Node Worker…","createPythonWorker":"Create Python Worker…","debugTests":"Debug Tests","deploy":"Deploy","findUsages":"Find Usages in Code","goToImplementation":"Go to Implementation","groupByFiles":"Group by Files","jobWorkerSkeleton":"Job Worker Skeleton…","migrationReport":"Migration Report","nodeWorkerSkeleton":"Node Worker Skeleton…","pythonWorkerSkeleton":"Python Worker Skeleton…","runAllProcessTests":"Run All Process Tests","runTests":"Run Tests","showFolders":"Show Folders","openConnections":"Open the connections map","openMigration":"Review and accept changes"},"codeLinks":{"detail":"what runs each step, its tests and coverage: Penstock Pro","tooltip":"Penstock Pro links the diagrams with the code that runs them: workers, usages, variables and error codes across both, tests run from the diagram and coverage on it"},"count":{"files":{"one":"{count} file","other":"{count} files"},"tasks":{"one":"{count} task","other":"{count} tasks"},"templates":{"one":"{count} template","other":"{count} templates"},"tests":{"one":"{count} test","other":"{count} tests"},"scripts":{"one":"{count} script","other":"{count} scripts"}},"debug":{"activeAt":"Active: {name}","pausedAt":"Paused at {name}"},"detail":{"calledBy":"called by {name}","calls":"calls {name}","catches":"catches","catchesName":"catches {name}","caught":"caught {number}","caughtThrown":"caught {caught} · thrown {thrown}","checkedAt":"checked at {where}","converts":"converts","decision":"decision {id}","defaultProfile":"default","filesBlocked":"{number} blocked","filesNeedingWork":"{number} needs work","form":"form {id}","implementation":"implementation","inCode":"{number} in code","inForce":"in force","instance":"instance {instance}","lastDeploy":"last: {when}","listener":"{event} listener","neverSet":"never set in the project","neverThrown":"never thrown","noAddress":"no address","noImplementation":"no implementation","notCaught":"not caught","notInProject":"not in project","notInThisProject":"not in this project","nothingHandlesIt":"Nothing in this project's code handles it","onWhere":"On {where}, {text}","outOfStep":"{number} out of step","percentCovered":"{percent}% covered","readBy":"read by {number}","reads":"reads","readsInCode":"reads in code","setAs":"set as '{name}'?","setBy":"set by {number}","sets":"sets","setsInCode":"sets in code","test":"test","testGroup":"Tests","theEngine":"the engine","thrown":"thrown {number}","throws":"throws","throwsName":"throws {name}","toCheck":"{number} to check","toCheckOne":"to check","toDo":"{number} to do","toDoOne":"to do","connectionsUndefined":"{number} not defined","connectionsOk":"all defined"},"examples":{"camunda7Detail":"a Java delegate and an external task worker","camunda7Label":"Camunda 7 order process","camunda8Detail":"a Spring Boot worker and a Node worker","camunda8Label":"Camunda 8 order process","cibSevenDetail":"a Java delegate and an external task worker, on CIB seven","cibSevenLabel":"CIB seven order process","detail":"a small project that runs, in this folder","operatonDetail":"a Java delegate and an external task worker, on Operaton","operatonLabel":"Operaton order process","flowableLabel":"Flowable order process","flowableDetail":"a Spring Boot engine with a Java delegate and a user task, on Flowable","activitiLabel":"Activiti order process","activitiDetail":"a Spring Boot engine with a Java delegate and a user task, on Activiti"},"kind":{"bean":"bean","javaClass":"class","jobType":"job type","topic":"topic"},"migrationStatus":{"blocked":"blocked","converts":"converts","needsWork":"needs work","ready":"ready"},"section":{"code":"Code","debug":"Debug","decisions":"Decisions","deployment":"Deployment","errors":"Errors","examples":"Start from an example","files":"Files","forms":"Forms","messages":"Messages","migration":"Migrate to Camunda 8","processes":"Processes","templates":"Element Templates","tests":"Tests","variables":"Variables","workers":"Workers","scripts":"Scripts","connections":"Connections"},"title":{"implementationsOf":"Implementations of {name}","theProcessTests":"the process tests"},"tooltip":{"becomes":"Becomes {what}.","errorNeverThrown":"An error event catches it and nothing throws it","errorUncaught":"The code throws it and no error event catches it","migration":"What does not carry over from Camunda 7 to Camunda {target}, file by file, and what the Java code becomes","templatesOutOfStep":"Some templates no longer say what the worker they were written from does","variableTypo":"Nothing sets '{name}', and '{typo}' is set: a typo in one of them?","connections":"The secrets and MCP clients your diagrams refer to, and where each one is defined."},"unsupported":{"script":"Scripts open in an IDE tab. Here, edit the script in the element's Properties panel."},"script":{"missing":"That script is no longer in the diagram."}},"scenarios":{"aGateway":"a gateway","addedScenario":"Added scenario","barText":{"stepOf":"Step {at} of {total}","steps":"{count} steps"},"cannotFollow":"Penstock cannot follow process \\"{process}\\": it has no start event to begin at.","checksUnreachedElements":"This scenario checks elements that no way through the current diagram reaches.","chooseAProcess":"This diagram has several executable processes ({processes}): choose one.","coverage":{"capped":"The diagram has more ways through it than fit in {cap} scenarios: these scenarios together reach every flow and end.","doesNotFollow":"Penstock does not follow the steps inside \\"{name}\\": {why}","endEvents":"{unreached} of {total} end events","flows":"{unreached} of {total} flows","noScenarioReaches":"No scenario reaches {parts} (dashed on the diagram)"},"difference":{"againstSteps":"the steps of the plan","againstStepsAndVariables":"the steps of the plan and the variables asserted at its end","branch":"expected {expected}, took {took}","notSet":"not set","plannedButNotRun":"planned, but it did not run","ranButNotPlanned":"ran, but the scenario did not plan it","value":"{name}: expected {expected}, got {got}"},"dmn":{"cannotReadInput":"Penstock cannot read the input {inputs}","chooseVariablesFor":"choose variables for {names}","hitPolicy":{"outputOrder":"Output order","priority":"Priority"},"hitPolicyAny":"Hit policy Any, but rules {rules} match with different results","hitPolicyNeedsValues":"Hit policy {policy} needs output values to order by","hitPolicyUnique":"Hit policy Unique, but rules {first} and {last} both match: the engine raises an error","inputFits":"{input} {value} fits {cell}","noRuleMatches":"no rule matches these values","raisesAnError":"the engine raises an error, so it returns nothing","returnsOutputs":"it returns {outputs}","ruleMatches":"Rule {rule} matches","rulesMatch":"Rules {rules} match","tableBecause":"{table}: {because}","textAsNumber":"{name} is text {value}, but the rules compare it as a number","unnamedInput":"input {number}","unnamedOutput":"output {number}","why":"{which}; {returns}","whyWithReasons":"{which}: {reasons}; {returns}"},"doesNotReachAnEnd":"With these values the process does not reach an end.","duplicateDecision":"The decision \\"{id}\\" is in {used} and {other}: Penstock uses {used}","event":{"message":"{name} (message {message})","signal":"{name} (signal {signal})","timer":"{name} (timer {timer})"},"gatewayHint":{"cannotCheck":"Penstock cannot check {text} here","chooseVariables":"choose variables so that {text}","default":"the default: taken when no other condition is true","isFalse":"{text} is false{used}","isTrue":"{text} is true{used}","noCondition":"has no condition, so it is always taken","undecided":"{text} cannot be decided: {notes}; Camunda 8 can stop at an incident here"},"gatewayNeedsCondition":"Every flow out of an exclusive gateway needs a condition in Camunda 8, except the default flow. Give it a condition, or make it the default flow in the properties panel first.","issue":{"doesNotFollowInside":"Penstock does not follow the steps inside {label}: {why}","nothingCompletesTheStep":"The scenario has no instruction that completes this step","nothingMakesTheEventHappen":"The scenario has no instruction that makes this event happen","overlap":"Both {first} and {last} are true{values}: the engine takes the first in the file, {taken}, {never}","stuckAtGateway":"No condition is true and there is no default: the engine raises an incident here","timerNeverFires":"The scenario does not let this timer fire","valuesDoNotTake":"{hints}: these values do not take {names}","valuesTakeMore":"{hints}: these values also take {names}"},"listSeparator":{"many":" or ","two":" or "},"namesNoProcess":"This scenario names no process, and this diagram has several executable processes ({processes}).","needsAnEngine":"Running scenarios needs an engine. Set up the deployment profile in force with an address, as for Deploy, and a local engine or one marked deployment.forTests: true.","noConditionAtGateway":"No condition is true at {where} and there is no default flow: the engine raises an incident there.","noExecutableProcess":"This diagram has no executable process.","notFollowed":{"adhoc":"an ad-hoc sub-process runs its steps in any order","callActivity":"a call activity runs another process"},"note":{"noOrder":"Penstock does not compare {kind} values with < or >","noTextOrder":"Penstock does not compare text with < or >","notBoolean":"{name} is {value}, not true or false","otherKind":"{name} is {value}, not {other}"},"processNotExecutable":"This scenario starts process \\"{process}\\", which is not executable in this diagram.","processNotInDiagram":"This scenario starts process \\"{process}\\", which is not in this diagram.","quoted":"\\"{name}\\"","slot":{"carriesNothing":"Carries no variables.","completesWithNothing":"Completes with no variables. Add the ones the form would send.","expectedAtTheEnd":"Variables that must be set at the end","itReturns":"It returns","messageCarries":"The message carries","noVariablesAdd":"No variables. Add the ones the gateways below need.","nothingChecked":"Nothing is checked about the variables. Add the ones that matter.","returnsNothingAdd":"Returns nothing. Add the variables it should set.","signalCarries":"The signal carries","startVariables":"Start variables","theyCompleteWith":"They complete it with","workerReturns":"The worker returns"},"step":{"callsTheProcess":"Runs the process {process} (the scenario checks this step, not what is inside)","code":"code","comesFirst":"; in this scenario {target} comes first","correlationKey":" (correlation key {key})","evaluatesTheDecision":"Evaluates the decision {decision}","failsWithError":"fails with error {code}","gatewaySendsOn":"The gateway sends the process on","labelCatchesIt":" and {label} catches it","labelSendsOn":"{label} sends the process on","messageArrives":"Message \\"{message}\\" arrives{key}","messageCaught":"Message \\"{message}\\" arrives while the task waits, and {label} catches it{key}","neverTakenMany":"so {names} are never taken","neverTakenOne":"so {name} is never taken","noBranch":"no branch","noConditionNoDefault":"No condition is true and there is no default flow","passesThrough":"Passes through {label}","personCompletes":"A person completes {label}{with}","processEndsAt":"The process ends at {label}","repeatsPerItem":" (once here; it repeats for each item)","returns":"returns {values}","returnsNothing":"returns nothing","runs":"Runs {label}","runsAndCompletes":"{label} runs {which} and completes","runsStepsFollow":"Runs {label}: its steps follow{repeats}","signalIsBroadcast":"Signal \\"{signal}\\" is broadcast{caught}","splitsInto":"Splits into {number} branches that run side by side","startsWithVariables":"Starts at {label} with these variables","startsWithoutVariables":"Starts at {label} with no variables","subProcessEndsAt":"The sub-process ends at {label}","subProcessStartsAt":"The sub-process starts at {label}","takesBecause":"Takes {names}: {because}","takesButValues":"Takes {names} for this scenario, but these values would take {other}","taskFailsWithError":"The task fails with error {code} and {label} catches it","timerFires":"{label} fires{when} - the scenario lets it fire at once","waitsForBranches":"Waits for {number} incoming branches, then goes on","waitsForFirst":"Waits for whichever comes first: {targets}","with":" with {values}","workerOf":"The worker of {label} ({kind} {type}) {what}"},"takesAnotherWay":"The values in this scenario take another way through the process than the elements it checks.","targetNeedsSignIn":"The engine at {url} needs a sign-in. Save the password in Deploy > Connection..., then run again.","theElement":"the {type}","theType":"the {type}","thisKindOfSubProcess":"this kind of sub-process","value":{"text":"text {value}"},"valueKind":{"boolean":"true or false","null":"null","number":"a number","other":"a {kind}","text":"text"},"workerKind":{"jobType":"job type","topic":"topic"}},"testCases":{"count":{"instances":{"one":"1 {state} instance","other":"{count} {state} instances"},"testBuilds":{"one":"1 test build","other":"{count} test builds"}},"elementIdMismatch":"{label} is the element {actual}, expected {expected}","engines":{"activityNotRunning":"the activity instance {element} is not running","answered":"{method} {path} answered {status}{reason}","deployed":"deployed","errorThrownByTheTestCase":"{code} thrown by the test case","reason":": {reason}","refusedTheBuild":"The engine refused the test build ({status}): {reason}"},"failingOnPurpose":"failing as the test case asks ({tried} of {total})","forOtherEngines":"this test case is for {engines}","leftovers":{"kept":"Could not remove {builds} left by an interrupted run; the next run tries again","removed":"Removed {builds} left by an interrupted run"},"listSeparator":" and ","log":{"broadcast":"Broadcast {signal}","completed":"Completed {label}","correlated":"Correlated {message}","couldNotCancel":"Could not cancel the instance: {reason}","couldNotReadTheTrace":"Could not read the trace: {reason}","couldNotRemoveTheBuild":"Could not remove the test build: {reason}","deployedTheBuild":"Deployed the test build","failedOnPurpose":"{label}: failed on purpose, {tried} of {total}","mockCompleted":"{label}: the mock completed the job","mockThrew":"{label}: the mock threw {code}","noElementWithJobType":"No element of the diagram has the job type {jobType}, so its mock answers nothing","startedInstance":"Started instance {instance}","failedAsIncident":"{label} was made to fail with no retries left, as in the incident"},"mismatch":{"activeExactly":"active: {active}, expected exactly {expected}","completedInOrder":"completed in the order {order}, expected {expected}","hasNotCompleted":"has not completed","hasNotFailed":"{label} has not failed{where}","incidentExpected":"expected an open incident, there is none","incidentUnexpected":"expected no open incident, there is one at {elements}","instanceCount":"{label} has {count}, expected {expected}{where}","instanceState":"expected the instance to be {expected}, it is {actual}{where}","isActive":"is active","isNotActive":"is not active","notWaitingForAUser":"{label} is not waiting for a user{where}","userTaskNotCompleted":"{label} has not completed{where}","variableNotSet":"variable {name} is not set","variableValue":"{name} is {actual}, expected {expected}","wasNotCanceled":"{label} was not canceled{where}","wasNotReached":"{label} was not reached{where}","wasNotTerminated":"was not terminated","wasReached":"was reached","incidentMissing":"{label} has no incident{where}","incidentOtherType":"{label} has an incident of type {actual}, not {expected}","incidentOtherMessage":"{label} has an incident, but its message \\"{actual}\\" does not match {expected}"},"needsCreateProcessInstance":"a test case starts with CREATE_PROCESS_INSTANCE, after its mocks","noElementNamed":"no element named {name} in the diagram","notActiveSoNoVariables":"{label} is not active, so its variables cannot be set","notInDiagram":{"one":"the test case expects {ids}, which is not in this diagram","other":"the test case expects {ids}, which are not in this diagram"},"nothing":"nothing","numberedCaseName":"{name} ({seen})","one":"one","penstockFailed":"Penstock failed: {reason}","problem":{"behaviourNeedsErrorCode":"the behaviour of {element} needs errorCode","behaviourNeedsThen":"the behaviour of {element} needs then: complete, error, fire or hold","behavioursNotAnObject":"x-penstock.behaviours is not an object","blockNotAnObject":"x-penstock is not an object","caseHasNoInstructions":"test case \\"{name}\\" has no instructions","caseHasNoName":"test case {number} has no name","enginesList":"x-penstock.engines is a list of {engines}","fileLeftAsItIs":"the file is left as it is: {problems}","fileNotValidJson":"the file is not valid JSON, so it is left as it is: fix it first","hasNoInstructions":"it has no instructions","hasNoName":"it has no name","inCase":"test case \\"{name}\\": {problem}","instructionNeeds":"instruction {number} ({type}) needs {property}","instructionNotAllowed":"instruction {number} ({type}) has {property}, which the Camunda test-case schema does not allow","noTestCasesList":"there is no testCases list","notAnObject":"it is not an object","notJson":"not JSON: {reason}","shapelessInstruction":"instruction {number} is not an object with a type","reproducesNeedsElement":"The reproduces block needs an elementId.","reproducesBadPattern":"The message in the reproduces block should be a regular expression of at most 500 characters."},"safety":{"refusal":"Penstock answers jobs only on an engine meant for tests, and {where} is not marked as one. Mark the profile with deployment.forTests: true in penstock.yaml, or run against a local engine.","thisEngine":"this engine"},"scenarioName":{"boundaryFires":"{boundary} fires","way":"{decision}: {way}"},"startsOnAnEvent":"This process starts on {kind}, which Penstock cannot yet start a scenario from.","suites":{"cannotBeRead":"{suite} cannot be read","cannotRun":"cannot run","noDiagram":"no diagram belongs to {suite}","noEngineToRunOn":"{diagram} has no engine to run on: set deployment.url in penstock.yaml","traceOf":"trace of {name}: {where}","unlicensed":"Process test runs: part of Penstock Pro","unnamedCase":"test case {number}"},"toFillIn":"To fill in: {unresolved}","trace":{"couldNotRead":"Could not read {path}: the engine answered {status}{reason}","reason":": {reason}"},"unknownName":"?","unresolved":{"chooseVariables":"choose variables so that {condition} holds","chooseVariablesWithout":"choose variables so that {condition} does not hold","noConditionForTheWay":"\\"{decision}\\" has no condition for \\"{way}\\": give its flows conditions, or this test cannot choose the way","runsOncePerItem":"{name} runs once per item: repeat its COMPLETE_JOB for each one"},"unrunnable":{"exampleData":"{type} cannot use example data yet","foreignProcess":"{type} looks at the process {foreign}, and Penstock follows only the instance of {root}","notYet":"{type} is not something Penstock can run yet","oneInstancePerTestCase":"Penstock runs one instance per test case","runtimeInstructions":"{type} cannot run runtime instructions yet","shapelessInstruction":"instruction {number} is not an object with a type","unknown":"{type} is not something Penstock can run","userTaskFields":"ASSERT_USER_TASK cannot check {fields} yet"},"waiting":{"engineDidNotRun":"the engine did not run {label} within {seconds}","instanceNotShown":"the engine did not show the instance within {seconds}","jobNotHandedOut":"the engine did not hand out the job of {label} within {seconds}","messageFoundNothing":"the message {message} found nothing waiting for it within {seconds}","noJobAt":"no job at {where} within {seconds}","noUserTaskAt":"no user task {where} within {seconds}","noWorkerTook":"no worker took {type} within {seconds}","timerDidNotFire":"the timer {label} did not fire within {seconds}"},"whereAt":" at {elements}","kind":{"error":"an error event","escalation":"an escalation event","conditional":"a conditional event"},"edit":{"nameEmpty":"The name should not be empty.","nameTaken":"A scenario named {name} is already in this file, so the name should be different.","notFound":"No scenario named {name} is in this file.","copyName":"{name} copy","copyNumbered":"{name} copy {number}"},"taskTest":{"noProcess":"The diagram has no executable process.","notFound":"There is no element with the id {element} in the diagram.","noWay":"No way through the process reaches {element}.","cannotThrow":"{element} is a user task, so it cannot throw an error; complete it or hold it instead.","name":"Task test: {element}"},"failingWithIncident":"Failing on purpose to reproduce an incident"},"features":{"ai-chat":{"title":"AI chat","gives":"shows the changes an agent that speaks the Agent Client Protocol proposes to your diagrams on the canvas, for you to accept or reject"},"alreadyBought":"if you have already bought it","auto-layout":{"title":"Auto layout","gives":"turns a tangled diagram into a readable left-to-right flow"},"baseline":{"title":"Check baselines","gives":"fails a build only on problems that are new"},"bot":{"title":"The review bot","gives":"answers /penstock in pull and merge requests with pictures"},"buyIt":"buy it; the licence arrives on this machine by itself","changes-pictures":{"title":"Pictures of changes","gives":"draws what changed, coloured, next to what it was"},"ci-annotations":{"title":"Findings in the code review","gives":"shows the check findings as SARIF or annotations on the changed lines"},"code-links":{"title":"Diagram and code checks","gives":"finds tasks whose job type, topic, class or bean has nothing in the code to run it, and workers no diagram uses"},"docs":{"title":"Process documentation","gives":"writes a page for every process with its picture, steps, decisions, events and data"},"edit":{"title":"Editing from the command line","gives":"changes a diagram the way the editor would, and refuses an edit that breaks it"},"education":"Free Pro for students, teachers and open-source maintainers: apply at {url}","element-templates":{"title":"Element templates","gives":"writes an element template for every job worker the project has, so the Camunda palette fills itself in"},"flow-analysis":{"title":"Flow analysis","gives":"finds deadlocks, branches that run twice and steps that can never run, with the path that leads there"},"giveThePipelineAKey":"Give this pipeline a {tier} key in the PENSTOCK_LICENSE secret.","inAPipeline":" in a pipeline","migration":{"title":"Camunda 7 to Camunda 8 conversion","gives":"converts a diagram for Camunda 8, marks what it could not convert on the element, and writes job workers from the code of your delegates"},"partOf":"{title}{where}: part of Penstock {tier}. {gives}.","paths":{"title":"Process scenarios","gives":"lists every distinct way through a process with the conditions it takes, ready to use as a test plan"},"pr-report":{"title":"Pull request reports","gives":"writes one comment with the check, the diff and pictures of every changed diagram"},"test-case-generation":{"title":"Test case files","gives":"writes the test-case files for every way through each process, which scenarios run then plays back against an engine"},"test-runs":{"title":"Process test runs","gives":"runs a process step by step against a local engine, with mocks, and shows what every step received and changed"},"tests":{"title":"Process tests","gives":"writes a JUnit test for every way through a process, with variables that take it there, for Camunda Process Test or camunda-bpm-assert"},"theKeyHolds":"PENSTOCK_LICENSE holds a {have} licence; this needs {need}.","trialHasEnded":"Your {days}-day trial has ended.","variable-checks":{"title":"Variable checks","gives":"finds the fields and names a step reads that the code that sets them lacks"},"api-templates":{"title":"Templates from an API description","gives":"writes a REST connector element template for every operation of an OpenAPI, Swagger or Postman file, with typed inputs, authentication from its security schemes and error handling"},"connections-environments":{"title":"Environment comparison for connections","gives":"lists the secrets, MCP clients and settings that one environment lacks compared with another, so you see what the one you deploy to is missing before you deploy"},"incident-scenario":{"title":"Reproduce an incident as a scenario","gives":"turns an incident into a scenario that starts the process with its start values, drives the path it took and ends on the same incident, runs it, and checks a proposed fix against it"},"agent-tools":{"title":"Agent scenarios and migration","gives":"writes the scenario of an AI agent process with the model stubbed, and rewrites the agent elements of old Camunda templates to the current agent templates"},"ai-receipt":{"title":"Verification receipt for AI changes","gives":"writes a receipt of what an AI agent's change did to your files (what was added, removed or changed, the new problems it brought, the scenarios that ran), hands new problems back to the agent to fix, keeps the receipt as a file, and fails a pipeline when an agent's change has none"},"dmn-tests":{"title":"DMN test table","gives":"runs saved test cases on a decision table, shows which rules each case matched and which rules no case covers, and fails a pipeline when rule coverage falls below a minimum"},"migration-proof":{"title":"Migration proof on both engines","gives":"runs your scenarios on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and shows for every scenario whether the converted process behaves the same or where it first differs"},"policy-pack":{"title":"Policy pack in git","gives":"writes your team’s rules, severities, conventions, palette, element templates and baselines into a folder in git, pins it by hash, locks those settings in the editor, and fails a pipeline when the pack was changed, a rule was weakened or a required check did not run"},"promotion":{"title":"Environment promotion and drift","gives":"shows which resources of an environment differ from your files, plans and takes exactly what was verified on one environment to the next, names the secrets the target lacks, and refuses a protected environment without a typed confirmation or, in a pipeline, an approval record"},"audit-evidence":{"title":"Audit evidence pack","gives":"writes one reviewable package for a release: the diagrams as pictures, the check, scenario and DMN test results, the changes since the last tag, the policy and AI receipts, every file with its SHA-256 and a seal that shows tampering, and verifies a package again later"},"heatmap":{"title":"Heat map and bottlenecks from engine data","gives":"shows the elements of a diagram coloured by how often, how long and how badly they ran on the engine over a period you choose (visits, average and 95th percentile duration, incidents and failure rate) and lists the slowest and most failing elements, each a click from its place on the diagram"},"replay":{"title":"Replay and what-if from this token","gives":"shows the real history of one process instance on the diagram step by step with the variables at each step, and starts a new instance at a chosen element with those variables edited, only on an engine marked for tests or on this machine"},"incident-loop":{"title":"Incident to fix loop","gives":"runs an incident through its whole loop with every step shown: the reproducing scenario, the proposed fix, a check of the fix with that scenario, redeploying only the changed file and retrying the failed job, as a dry run first and with a confirmation before anything changes on the engine"},"refactor-bulk":{"title":"Bulk renames and Extract to Call Activity","gives":"renames many names at once from a mapping file, each with the same preview and the same refusals as a single rename, and moves a subprocess, or a fragment with one way in and one way out, into its own process replaced by a call activity wired through variable mappings; a single rename with its preview stays free, with no time limit"}},"license":{"activeOnThisMachine":"active on this machine","ago":{"days":"{count} days ago","months":"{count} months ago","today":"today","yesterday":"yesterday"},"checkoutNotHttps":"the checkout is not on https, so it is not opened: {protocol}","checkoutNotOpened":"the checkout could not be opened","checkoutNotOpenedStatus":"the checkout could not be opened ({status})","clockSetBack":"the system clock is set back below a time this machine already saw; set it right","codeWrongOrExpired":"That code is wrong or has expired. Ask for a new one.","couldNotBeReachedForATrial":"the licence service could not be reached to start the Pro trial","couldNotBeReachedForTheKey":"the licence service could not be reached to check PENSTOCK_LICENSE","count":{"days":{"one":"{count} day","other":"{count} days"},"moreDays":{"one":"{count} more day","other":"{count} more days"}},"fromTheEnvironmentKey":"from PENSTOCK_LICENSE","needsOneOnlineCheck":"this licence needs one online check to be renewed","noCheckoutYet":"there is no checkout for {tier} yet","noLicenceInCi":"no licence; set PENSTOCK_LICENSE for this pipeline","noStableMachineId":"this machine has no operating-system machine id, so it cannot start the Pro trial; activate a licence instead","notAValidKey":"PENSTOCK_LICENSE is not a valid Penstock key","notAnEmailAddress":"That does not look like an e-mail address.","notRenewed":"the licence has not been renewed for {days} days; connect once to keep it","offlineForAWhile":"offline; works {days} before it needs to check in","reason":{"cannotBeRead":"the licence cannot be read","datedInTheFuture":"the licence is dated in the future; check the clock","notSigned":"the licence is not signed by Penstock","otherMachine":"this licence belongs to another machine"},"refusedToStartATrial":"the licence service refused to start a trial","seatsFullHint":" Sign in with \`penstock license login\` to see the machines using it and free one.","serviceAnswered":"the licence service answered {status}","theLicenceWasRefused":"The licence was refused.","trialDaysLeft":"Pro trial, {days} left","trialHasEnded":"the Pro trial has ended","unusable":"The licence service answered with a licence that cannot be used: {reason}."},"output":{"accepted":"{count} accepted","alreadyThereAndKept":", {count} already there and kept","authHint":{"basic":"Check deployment.auth.username in penstock.local.yaml and PENSTOCK_PASSWORD.","oauth":"Check deployment.auth.clientId and deployment.auth.tokenUrl in penstock.local.yaml and PENSTOCK_CLIENT_SECRET.","setIt":"Set deployment.auth in penstock.local.yaml: type basic with a username and PENSTOCK_PASSWORD, or type oauth with PENSTOCK_CLIENT_SECRET; PENSTOCK_TOKEN sends a bearer token as it is."},"boundaryFires":"{decision}: {boundary} fires","classNeedsDependency":"The class needs this test dependency{where}:","complete":"complete","confirmInTerminal":"Run test cases on {url}? They deploy a test build there, start instances and answer the jobs they mock. [y/N] ","couldNotRememberBuilds":"Penstock could not remember its test builds in {file}:","count":{"class":{"one":"{count} class","other":"{count} classes"},"diagram":{"one":"{count} diagram","other":"{count} diagrams"},"file":{"one":"{count} file","other":"{count} files"},"finding":{"one":"{count} finding","other":"{count} findings"},"lostConnection":{"one":"{count} lost connection","other":"{count} lost connections"},"reference":{"one":"{count} reference","other":"{count} references"},"scenario":{"one":"{count} scenario","other":"{count} scenarios"},"sourceFile":{"one":"{count} source file","other":"{count} source files"},"test":{"one":"{count} test","other":"{count} tests"},"way":{"one":"{count} way","other":"{count} ways"},"worker":{"one":"{count} worker","other":"{count} workers"}},"decisionWay":"{decision}: {way}","end":"end","everyRuleHasAPage":"Every rule has a page with why it matters and how to fix it: {url}","everyTaskHasCode":"Every task the diagrams hand to code has something in the code to run it.","firesOn":"{boundary} fires on {decision}","fixedSinceTheBaseline":"{count} fixed since the baseline","flowAnalysisLeftOut":"Flow analysis was left out: it is part of Penstock Pro, and Team in a pipeline. penstock license buy","fromDiagramsToCode":"{sources}, {diagrams}, {references} from diagrams to code","inFile":" in {file}","kind":{"decision":"decision","form":"form","notBpmn":"file that is not BPMN"},"layoutAlwaysReflows":"Auto layout always reflows, so a difference here is expected; pass --write to take it.","newCount":"{count} new","newFindings":"{count} new","noBpmnFiles":"No .bpmn files found.","noChange":"no change","noExecutableProcessWithAWay":"no executable process with a way through it that starts at a plain start event","noLostConnections":"no lost connections","noProcessWithAPath":"No process with a path to an end was found.","noSteps":"no steps","noSuchPath":"There is no path {target}","isAFolder":"{file} is a folder, not a file.","folderTooLarge":"This folder is too large to be a project; give the folder of the diagrams","noTestCaseFile":"there is no test-case file; penstock scenarios generate writes {file}","noTestCaseFiles":"No test-case files found. penstock scenarios generate writes them from the ways through each process.","noTestCaseFilesFirst":"No test-case files found. penstock scenarios generate writes them first.","notABpmnDiagram":"{file} is a {kind}, not a BPMN diagram, so there is nothing to show.","notConfirmedForTests":"Not run: the engine was not confirmed for tests","notMarkedForTests":"{url} is not marked deployment.forTests: run in a terminal to confirm it once, or mark the profile with deployment.forTests: true","notValid":"{file} is not valid {what}: {reason}","notValidFile":"This file is not valid {what}: {reason}","nothingNew":"nothing new","nothingToDeploy":"Nothing to deploy: no file has a deployment.url.","penstockOnlyCases":" test cases that need Penstock and run differently there ({count}): {names}","penstockBehaviourHints":"the steps carry Penstock behaviour hints, which Camunda Process Test does not read","whyItMatters":"Why it matters. {why}","howToFixIt":"How to fix it. {fix}","see":"See {docs}","pipelineCannotConfirm":"{url} is not marked deployment.forTests, and a pipeline cannot confirm it: mark the profile with deployment.forTests: true","ready":"ready","reflowedLayout":"reflowed layout","rulesCouldNotRun":"The rules could not run: {reason}","unresolvedReference":"{id} points at {value} as its {property}, and the file has no element with that id.","runUpdateBaseline":"Run check --update-baseline to record what is fixed.","stopped":"Stopped: {totals}","tasksPointAtNothing":"Tasks that point at code that is not there: {count}.","testsNeedDependencies":"The tests need these test dependencies{where}:","testsSummary":"{tests} in {classes}, one per way through each process.","theConnectionFromTo":"the connection from {from} to {to}","theFileIsEmpty":"This file is empty","theKind":"the {kind}","toFillIn":"{count} to fill in","toFillInPrefix":"To fill in","totals":"{passed} passed, {failed} failed, {skipped} skipped in {files}","unresolvedWorker":"note {workers} with a type written as an expression that could not be read, starting at {where}","when":" when {condition}","wouldReflowLayout":"would reflow layout (pass --write to save)","wroteFindings":"wrote {file} with {findings}","wroteTestEngine":"wrote {file} an in-memory test engine that resolves mocked delegate beans","wroteTheBridge":"wrote {file} runs {files} under Camunda Process Test","classNotInProject":"class {value} is not in the project","listenerName":"{value} listener","runsSteps":"- [ ] runs {steps}","wroteScenarios":"wrote {file} {scenarios}{toFillIn}","andToFillIn":{"one":", {count} to fill in","other":", {count} to fill in"},"couldNotBePlanned":", {ways} could not be planned: {problem}","status":{"ok":"ok","pass":"pass","fail":"fail","note":"note","skip":"skip","same":"same","change":"change","wrote":"wrote","sent":"sent","updated":"updated","added":"added","removed":"removed","changed":"changed","kept":"kept","wouldChange":"would change","wouldRewrite":"would rewrite","wouldSend":"would send","error":"error","warning":"warning","info":"info"},"noDeploymentUrl":"no deployment.url in its configuration","authNote":{"passwordNotRead":"deployment.auth.password is not read: a password comes from PENSTOCK_PASSWORD or the IDE password safe, never from a file"},"authProblem":{"basicWithoutUsername":"deployment.auth.type is basic, but deployment.auth.username is not set","basicWithoutPassword":"deployment.auth.type is basic, but there is no password: set PENSTOCK_PASSWORD (the IDE keeps it in its password safe)","oauthWithoutKeys":"deployment.auth.type is oauth, but it needs deployment.auth.tokenUrl, deployment.auth.clientId and PENSTOCK_CLIENT_SECRET","oauthFailed":"the token endpoint answered {status}: {body}","oauthNeedsKeys":"oauth needs deployment.auth.tokenUrl, deployment.auth.clientId and PENSTOCK_CLIENT_SECRET","oauthNoToken":"the token endpoint's answer has no access_token","oauthUnreachable":"the token endpoint at {url} did not answer: {reason}"},"unreadableBpmn":"this file is not valid BPMN XML","noWorkerForJobType":"no worker handles job type \\"{value}\\"","noWorkerForTopic":"no external task worker subscribes to topic \\"{value}\\"","noBeanNamed":"no Spring bean is named \\"{value}\\"","callsNoProjectProcess":"calls process \\"{value}\\", which no diagram in the project defines","callsNoProjectDecision":"calls decision \\"{value}\\", which no .dmn file in the project defines","showsNoProjectForm":"shows form \\"{value}\\", which no .form file in the project defines","showsNoEmbeddedForm":"shows embedded form \\"{value}\\", which the diagram does not contain","jobTypeNoDiagramUses":"worker for job type \\"{value}\\" is not used by any diagram","topicNoDiagramUses":"subscription to topic \\"{value}\\" is not used by any diagram","noJUnitBridge":"{engine} has no JUnit bridge yet: point a profile at your application's engine-rest and run penstock scenarios run","casesFolder":"Camunda Process Test reads test cases from src/test/resources/test-cases; move the file there","couldNotBePainted":"the diagram could not be painted","credentialsRefused":"It did not accept the credentials. {hint}","noGeneratedTests":"{engine} projects have no generated tests yet; Penstock writes tests for Camunda 7, Operaton, CIB seven and Camunda 8","noDeployFor":"Deploying to {engine} is not supported; deploy with the engine's own tools","taskTest":{"unreadable":"Cannot read {file}.","needsDiagram":"Say which diagram to test: penstock test task <file.bpmn> --element <id>.","needsElement":"Say which element to test with --element <id>.","element":"{element}: {state}","notReached":"{element} was never reached.","instance":"Process instance: {state}","received":"It received:","sent":"It sent:","variables":"Variables at the end:","noIncidents":"No incidents.","incidents":"Incidents:","trace":"Trace: {file}","badVariables":"{flag} is not a JSON object: {reason}","oneMode":"Use only one of --complete, --error and --hold.","state":{"COMPLETED":"completed","ACTIVE":"waiting","TERMINATED":"terminated","FAILED":"failed"}}},"templates":{"drift":{"differentType":"has {name} as a different type","noLongerRead":"asks for {name}, which the worker no longer reads","notRead":"has {name}, which the worker no longer reads"},"workerDescription":"The job worker {worker} in {where}.","workerSets":" Sets {names}.","workerInPackage":"{class} in {package}","writtenByPenstock":"Written by Penstock from the code.","rejected":{"line":"The template {name} ({id}) is not loaded: {reason}","notAnObject":"it should be a JSON object","schemaMissing":"it should have a $schema attribute that names the Camunda 8 element template schema","schemaOther":"its $schema attribute should name the Camunda 8 element template schema","elementType":"its elementType should be an object whose value names the BPMN element, such as bpmn:ServiceTask","appliesTo":"its appliesTo should be a list of BPMN element types, such as bpmn:Task","unexplained":"the Camunda modeler does not accept it and gives no reason","anonymous":"A template is not loaded: {reason}"},"check":{"schemaFallback":"does not match the schema","camunda7":"Camunda 7","camunda8":"Camunda 8","syntax":"The file is not valid JSON: {reason}","notAnObject":"The file should hold one element template or a list of them.","entryNotAnObject":"Entry {index} of the list should be an element template object.","schemaMissing":"It should have a $schema attribute, {schema}, or Camunda 8 will not load it.","schemaUnknown":"Its $schema should name the Camunda element template schema.","schemaEngine":"Its $schema names the {schema} schema, but this project runs {engine}.","schemaNewer":"Its $schema is pinned to version {pinned}, newer than the {supported} that Penstock checks against.","bindingOtherEngine":"Property {index} binds {type}, which belongs to {engine}; this is a {here} template.","bindingTwice":"Property {index} binds {type} {name} again; property {first} already does.","appliesToMissing":"It should have an appliesTo list of BPMN element types, such as bpmn:Task.","appliesToEmpty":"Its appliesTo list should name at least one BPMN element type.","appliesToText":"Entry {index} of appliesTo should be text.","appliesToType":"{type} in appliesTo should be a BPMN element type, such as bpmn:Task.","elementTypeValue":"Its elementType should be an object with a value, such as bpmn:ServiceTask.","elementTypeOutside":"Its elementType {element} is not one of the elements that appliesTo ({applies}) names.","engineRange":"engines.camunda, {range}, should be a version range such as ^8.5.","engineMismatch":"It asks for Camunda {range}, but the diagrams here use {versions}, so the modeler hides it.","duplicate":"The id {id} with version {version} is already defined in {where}; only one of them is loaded.","duplicateNoVersion":"The id {id} without a version is already defined in {where}; only one of them is loaded.","folderOther":"Camunda Desktop Modeler reads only .camunda/element-templates and resources/element-templates; move the file there.","folderNone":"This looks like an element template, but it is not in an element-templates folder, so the modeler never reads it.","webCamunda7":"Web Modeler runs Camunda 8 only and does not take Camunda 7 templates."},"editor":{"customProperties":"Custom properties","sectionTemplate":"Template","name":"Name","id":"ID","version":"Version","description":"Description","engine":"Schema","appliesTo":"Applies to","appliesToHint":"BPMN element types, separated by commas, for example bpmn:ServiceTask","elementType":"Element type","elementTypeHint":"The type the element becomes when the template is applied, for example bpmn:ServiceTask","entriesVisible":"Default entries","keepDefaults":"Keep the standard properties panel entries visible","entriesVisibleHint":"Off hides everything the template does not define","keywords":"Keywords","documentationRef":"Documentation link","runsOn":"Runs on","runsOnHint":"Engine version range, for example ^8.7","groups":"Groups","noGroups":"No groups. Properties without a group appear under Custom properties.","addGroup":"Add group","groupId":"Group ID","groupLabel":"Group label","properties":"Properties","noProperties":"No properties yet.","addProperty":"Add property","propertyHeading":"Property {number}","label":"Label","type":"Type","defaultValue":"Default value","checkedByDefault":"Checked by default","propertyId":"Property ID","propertyIdHint":"Needed when a condition or another property refers to this one","group":"Group","noGroup":"No group","optional":"Optional","mayStayEmpty":"May stay empty","binding":"Binding","bindingType":"Binds to","bindingName":"Name","bindingSource":"Source","bindingSourceHint":"The expression the output is read from, for example =response","constraints":"Constraints","notEmpty":"Required","mustBeFilled":"Must be filled in","minLength":"Minimum length","maxLength":"Maximum length","pattern":"Pattern","patternHint":"A regular expression the value has to match","feelMode":"FEEL","feelOptions":{"none":"Not an expression","optional":"Expression allowed","required":"Expression required","static":"Static expression"},"choices":"Choices","choiceName":"Shown as","choiceValue":"Value","addChoice":"Add choice","condition":"Show only when","conditionProperty":"Property","conditionNone":"Always shown","conditionNeedsIds":"Give another property an ID to use it in a condition","conditionIs":"Is","conditionEquals":"Equal to","conditionOneOf":"One of","conditionActive":"Filled in","conditionValue":"Value","moveUp":"Move up","moveDown":"Move down","remove":"Remove","nothingToPreview":"Nothing to preview yet","previewFillsIn":"The properties panel fills in as you add properties.","versionNumber":"Version {version}","noFieldsYet":"This template has no fields yet.","feelBadge":"FEEL","hiddenByConditions":"{count} hidden by conditions. Change the values above to see them.","hiddenProperties":"Hidden properties set silently: {count}.","defaultsShown":"The standard properties panel entries stay visible below these.","defaultsHidden":"The standard properties panel entries are hidden.","sourceLabel":"Source of {name}","matchesSchema":"The template matches the element template schema.","atLine":"Line {line}","entries":"Templates in this file","entry":"Template {number} of {total}","unreadable":"This file is not valid JSON","unreadableHint":"Fix it in the source view, and the form comes back.","notATemplate":"This is not an element template","notATemplateHint":"The file is a JSON object or list with no template in it. Open the source to change it.","openSource":"Open source","loading":{"title":"Template files and who loads them","intro":"Every element template file found in this project, whether Camunda Desktop Modeler and Web Modeler would load it, and the reason when not.","refresh":"Refresh","reading":"Reading the project…","none":"No element template files found","noneHint":"Put template JSON files in .camunda/element-templates or resources/element-templates.","summary":"{loading} of {total} files load in Camunda Desktop Modeler.","file":"File","desktop":"Desktop Modeler","web":"Web Modeler","reason":"Reason","loads":"Loads","notLoaded":"Not loaded","some":"{loaded} of {total}"}},"generate":{"untitled":"API","unreadable":"The API description is neither JSON nor YAML that can be read: {reason}","unrecognised":"This is not an OpenAPI 3, Swagger 2.0 or Postman collection file.","noOperations":"The API description has no operations to make templates from.","warn":{"unsupportedAuth":"The security scheme {scheme} ({kind}) is not one the REST connector can use, so {operation} has no authentication.","noServer":"The description gives no server URL, so a template url starts at the path: set the base address in each template.","secretExists":"The secret name {name} is already defined in this project, so a template would read that existing secret. Check it is the one you mean, or choose another prefix."},"refused":"These files were not written: {files}","reason":{"outside":"it is outside the folder","symlink":"it is a symbolic link","exists":"it already exists"},"open":"Generate templates from an API description…","dialog":{"title":"Generate element templates","intro":"Choose an OpenAPI, Swagger or Postman file. One REST connector template is made for each operation.","file":"API description","summary":"{title} in {file}: {total} operations found","preview":"Showing the first {shown} of {total} operations. Writing every template needs Pro.","write":"Write templates","written":"Templates written: {count}, in {folder}","noFolder":"Open a project folder first, so the templates have a place to go.","replaceTitle":"Replace existing templates?","replaceText":"These files already exist and will be replaced: {files}","replace":"Replace","failed":"The templates were not written: {reason}","secretsBefore":"Secrets to create: the templates read these names. Writing the templates does not create them; add them to your connector secrets or .env files. Only names are shown.","secretsAfter":"Templates written. Now create these secrets before they run: {names}.","secretsLabel":"Secret names"}}},"connectors":{"archiveDamaged":"The release archive is damaged or incomplete","archiveHasNoTemplates":"The release archive holds no element templates","archiveTooLarge":"The release archive unpacks to more than 512 MB","couldNotBeDownloaded":"The connector templates could not be downloaded","githubAnswered":"GitHub answered HTTP {status}","githubRefused":"GitHub refused the request (HTTP {status}), probably its rate limit; try again later","responseTooLarge":"The response is larger than 64 MB"},"evaluate":{"camunda7Cannot":"Camunda 7 has no way to evaluate an expression. It needs Camunda 8.9 or newer.","expressionNotEvaluated":"The expression could not be evaluated","instancesNotReadable":"The instances of {process} could not be read","needs810":"Camunda 8.10 or newer","needs89":"Camunda 8.9 or newer","processDefinitionNotReadable":"The process definition {process} could not be read","variableNamesNotReadable":"The variable names the engine has seen could not be read","variableNotReadable":"The variable {name} could not be read","variablesNotReadable":"The variables of {instance} could not be read","credentialsMayNotAllow":"the profile's credentials may not allow it","engineAnswered":"{what}: the engine answered {status}","needsThatVersion":"{what} needs Camunda {version} or newer."},"findings":{"because":": {reason}","notValid":"The file is not valid {what}{reason}","nothingInIt":"The file has nothing in it, so there is no diagram to open.","soItCannotBeOpened":", so it cannot be opened or checked.","theFileCannotBeRead":"The file cannot be read","theFileIsEmpty":"The file is empty"},"sections":{"hitPolicy":{"any":"Any: several rules may match if they give the same result","collect":"Collect: every matching rule contributes","first":"First: the first matching rule wins","outputOrder":"Output order: every matching rule, by output priority","priority":"Priority: the matching rule with the highest output priority wins","ruleOrder":"Rule order: every matching rule, in rule order","unique":"Unique: exactly one rule may match"},"hitPolicyText":"Hit policy {policy}{aggregation}.","resultsCombinedBy":", results combined by {how}","whenInput":"When {input}","thenOutput":"Then {output}","inputOf":"input {number}","outputOf":"output {number}","optionsFrom":"from {source}","fieldTable":"Fields","field":"Field","kind":"Kind","writes":"Writes","required":"Required","options":"Options","hiddenWhen":"Hidden when","yes":"yes","notes":"Notes","result":"Result","expression":"Expression","logic":"Logic","noLogic":"none","decision":"Decision","needs":"Needs","formKind":{"textfield":"text field","textarea":"text area","datetime":"date and time","taglist":"tag list","filepicker":"file picker"},"form":"Form"},"xml":{"emptyOrNotClosed":"This is not well-formed XML: the document is empty or not closed","notWellFormed":"This is not well-formed XML: {reason}"},"import":{"failure":{"nothingToImport":"There is nothing in this {format} file that has a BPMN meaning, so there is nothing to import.","bizagiPackage":"Bizagi .bpm files are a package in Bizagi Modeler's own format, which Penstock cannot read. In Bizagi Modeler, export the process as BPMN 2.0 (a .bpmn file) and import that instead.","visioBinary":"{name} is in the old binary Visio format (.vsd), which Penstock cannot read. In Visio, use File > Save As and choose Visio Drawing (.vsdx), then import that.","xpdl":"This is XPDL, which does not carry the diagram in a form Penstock can read. In the tool it came from, export the process as BPMN 2.0 (.bpmn) and import that.","unknownFormat":"{name} is not a diagram Penstock can import. It reads draw.io, Visio, Signavio and Bizagi files.","notBpmnXml":"This XML is not BPMN 2.0.","noPositions":"This BPMN file has no diagram positions (no BPMNDiagram), so there is nothing to draw. Open it in a modeler that lays it out, or draw it in Penstock.","entryTooLarge":"{name} is too large to import.","archiveTooLarge":"The archive is too large to import.","notZip":"The file is not a readable ZIP archive.","pageTooLarge":"This draw.io page is too large to import.","pageEmpty":"This draw.io page has no content.","compressedPage":"The compressed draw.io page could not be read. In draw.io, use File > Properties > Compressed off, or File > Export as > XML, and import that.","pageNoCells":"This draw.io page has no cells.","noPages":"This draw.io file has no pages.","notVisio":"This archive is not a Visio drawing: it has no visio/document.xml. Only .vsdx files are read.","noVisioPages":"This Visio drawing has no pages.","noShapes":"This Visio drawing has no shapes.","tooComplex":"This file is too large or too deeply nested to import safely.","entities":"This XML declares entities, which Penstock does not expand, so it was not imported.","notFrom":"{name} is a {format} file, not a {from} file, so nothing was imported. Leave out --from to import it as it is."},"note":{"packageImported":"The BPMN file {name} inside the package was imported.","vendorData":"{vendor} data was not carried over, since BPMN 2.0 has no place for it ({total}): {list}.","unknownEvent":"The event symbol \\"{symbol}\\" has no BPMN event type, so the event has no trigger.","diamond":"{shape} is a diamond, so it became an exclusive gateway.","freeText":"{shape} is free text, so it became a text annotation.","noteShape":"{shape} is a note, so it became a text annotation.","rectangle":"{shape} is a plain rectangle, so it became a task.","anUnlabelledShape":"An unlabelled shape","unmappedLabelled":"\\"{label}\\" ({shape}) has no BPMN meaning, so it was not imported.","unlabelledShape":{"one":"An unlabelled {shape} shape has no BPMN meaning, so it was not imported.","other":"{count} unlabelled {shape} shapes have no BPMN meaning, so they were not imported."},"untitled":"untitled","aStartEvent":"a start event","anEndEvent":"an end event","anIntermediateEvent":"an intermediate event","circle":"{shape} is a circle, so it became {kind}.","anUnlabelledCircle":"An unlabelled circle","aShape":"a shape","unlabelledMaster":"An unlabelled {shape} has no BPMN meaning, so it was not imported.","shape":"shape","laneAsPool":"The lane {node} was not inside a pool, so it became a pool.","boundaryEvent":"The boundary event {node} was not on any activity, so it became an intermediate catch event.","flowNotAttached":"{flow} is not attached to two shapes, so it was left out.","flowOnLane":"{flow} is attached to a lane, which a BPMN flow cannot be, so it was left out.","dataAssociation":"A connector between a data element and {node} became a plain association, because that element cannot read or write data.","flowToPool":"{flow} ends at a pool, so it became a message flow.","flowAcrossPools":"{flow} goes from {from} to {to} in another pool, so it became a message flow.","messageInsidePool":"{flow} is a message flow inside one pool, which BPMN does not allow, so it became an association.","flowAcrossSubProcess":"{flow} crosses the border of a sub-process, which a sequence flow cannot, so it became an association.","multipleEvent":"{node} is a {kind} event; BPMN needs to know which triggers, so it is a plain event.","dataObjects":{"one":"{count} data object became data object references, which is how the editor draws them.","other":"{count} data objects became data object references, which is how the editor draws them."},"otherPage":{"one":"The page \\"{page}\\" ({shapes} shape) was not imported, only the first page with content is.","other":"The page \\"{page}\\" ({shapes} shapes) was not imported, only the first page with content is."},"otherVisioPage":{"one":"The page \\"{page}\\" ({shapes} shape) was not imported, only the first page with shapes is.","other":"The page \\"{page}\\" ({shapes} shapes) was not imported, only the first page with shapes is."},"customData":{"one":"Custom data on {count} shape was not carried over: {keys}.","other":"Custom data on {count} shapes was not carried over: {keys}."},"genericConnectors":{"one":"{count} connector not taken from the BPMN stencil was read as sequence flows.","other":"{count} connectors not taken from the BPMN stencil were read as sequence flows."},"rotated":{"one":"{count} shape is rotated; the rotation was not carried over.","other":"{count} shapes are rotated; the rotation was not carried over."},"outsidePools":{"one":"{count} element outside every pool went into the nearest pool: {names}.","other":"{count} elements outside every pool went into the nearest pool: {names}."},"unnamed":"an unnamed {kind}","vendorKept":"{vendor} data was kept in the file as it is, in its own namespace, but no engine uses it ({total}): {list}."},"summary":"Imported from {format}: {counts}.","noteSection":"{title} ({count}):","noteHeading":"{count} {title}","importedName":"imported","noteTitle":{"unmapped":"Not imported","assumed":"Guessed","lost":"Not carried over"},"count":{"element":{"one":"{count} element","other":"{count} elements"},"flow":{"one":"{count} flow","other":"{count} flows"},"pool":{"one":"{count} pool","other":"{count} pools"},"lane":{"one":"{count} lane","other":"{count} lanes"}},"cellOf":"cell {number}","addedAs":"added as {cell}","theRule":"the rule","removed":"removed","unnamedConnector":"an unnamed connector","parallelMultiple":"parallel multiple","detail":{"camunda":"Camunda extensions kept as they are: {count}.","zeebe":"Zeebe extensions kept as they are: {count}.","converted":"Flowable extensions converted to {target}: {count}."},"flowable":{"jobTypes":"Flowable classes or beans that became job types of Camunda 8: {count} ({list}); a job worker of that type has to do the work.","listeners":"Flowable execution listeners that became Camunda 8 execution listeners: {count} ({list}); a job worker of that type has to run them.","expressions":"Flowable expressions rewritten as FEEL, so check them: {count} ({list}).","kept":"Flowable extensions with no {target} equivalent, kept as they are and ignored by the engine: {count} ({list})."},"modeler":{"title":"Camunda Modeler setup found in {root}.","nothing":"No Camunda Modeler templates, settings, plugins or lint rules were found in {root}.","templatesPicked":"Element templates in {folder}: {templates} valid in {files} files, {invalid} not valid. Penstock reads this folder as it is.","templatesListed":"Element templates in {folder}: {templates} valid in {files} files, {invalid} not valid. To use them, list the folder under elementTemplates in penstock.yaml (penstock.local.yaml for a folder outside the project).","lint":"Lint rules in {file}: {known} known to Penstock Check, {unknown} not known.","lintUnknown":"Not known to Penstock Check: {list}.","settings":"Settings in {file}: {keys}. Penstock does not use them.","plugins":"Plugins found: {list}. They are only listed, never run.","diagrams":"{files} BPMN files, {camunda} with Camunda and {zeebe} with Zeebe extensions. They are never changed.","capped":"The scan stopped at its limit, so there may be more.","keymap":"Keyboard shortcuts: {mapped} of {total} of Camunda Modeler's have a Penstock action. Write the VS Code keymap with -o <file>.","skipped":{"symlink":"Skipped {path}: it is a symbolic link.","tooLarge":"Skipped {path}: it is larger than the limit.","unreadable":"Skipped {path}: it could not be read.","notJson":"Skipped {path}: it is not valid JSON of the expected kind.","tooMany":"Stopped at {path}: there are more files than the limit.","outside":"Skipped {path}: it is outside the folder."}}},"rules":{"families":{"bpmnlint":{"title":"Modelling rules","about":"The bpmnlint rules that run on every BPMN diagram, in the editor and in \`penstock check\`. Which ones run, and how strictly, is set in \`.bpmnlintrc\`."},"compat":{"title":"Engine compatibility","about":"What the engine the diagram is written for cannot run: a missing job type, an element or an expression the chosen version does not support. They run on Camunda 7 and Camunda 8 diagrams, in the editor and in \`penstock check\`, against the version in the file's \`modeler:executionPlatformVersion\`, or the newest one without it. Operaton and CIB seven are checked as Camunda 7. A finding is called \`compat/<rule>\` here and in \`penstock check\`; a rule is turned off in \`.bpmnlintrc\` as \`camunda-compat/<rule>\` or, the same, \`compat/<rule>\`."},"drawing":{"title":"Drawing","about":"What is wrong with how a diagram is drawn, found by the check card in the editor and by the first section of \`penstock check\`. The errors break the picture; the others make it harder to read."},"flow":{"title":"Process flow","about":"What the way a process is wired can do when it runs. Part of Penstock Pro, and Team in a pipeline."},"table":{"title":"Decision tables","about":"What a DMN decision table does with the inputs it can be given. Part of Penstock Pro, and Team in a pipeline."},"form":{"title":"Forms","about":"What a Camunda Form does with what the user enters. Part of Penstock Pro, and Team in a pipeline."},"code":{"title":"Diagrams and code","about":"Where a diagram and the code that runs it disagree: a step nothing implements, a worker no diagram uses, a variable read under another name than it is set."},"convention":{"title":"Modelling conventions","about":"Conventions the editor applies while modelling, so a team does not have to remember them. They are set under \`conventions\` in \`penstock.yaml\`."},"engine":{"title":"Flowable and Activiti","about":"What a Flowable or an Activiti engine ignores or cannot run: an extension of another engine, an attribute the engine does not know, an element it does not support. They run on diagrams of the Flowable and Activiti profiles, in the editor and in \`penstock check\`. A finding is called \`engine/<rule>\`."},"connections":{"title":"Connections","about":"The configuration around a diagram that is not in the diagram: the secrets and MCP clients it names, and the environment files, Docker Compose files, Helm values and Spring Boot properties that are meant to supply them. A finding is called \`connections/<rule>\`. Comparing two environments is part of Penstock Pro, and Team in a pipeline."},"cmmn":{"title":"CMMN case models","about":"What is wrong in a Camunda 7 or Flowable case model: a reference that points at nothing, an id used twice, a task with nothing to run. They run on \`.cmmn\` files in the viewer and in \`penstock check\`. A finding is called \`cmmn/<rule>\`."},"agents":{"title":"AI agents","about":"What is wrong with an AI agent of Camunda 8: a loop with no limit, a tool the model cannot understand, a secret written into the diagram, an MCP client nothing configures, an element template that 8.10 has replaced. They run on \`.bpmn\` files in the editor and in \`penstock check\`. A finding is called \`agents/<rule>\`. Rewriting an old agent to the 8.10 templates is \`penstock migrate agents\`, which writes with Penstock Pro."}},"bpmnlint/ad-hoc-sub-process":{"title":"Ad-hoc sub-process with a start or end event","why":"An ad-hoc sub-process has no defined start or end: its activities run when someone chooses, so an event marking either is meaningless.","fix":"Delete the start and end events inside the ad-hoc sub-process."},"bpmnlint/conditional-event":{"title":"Conditional event without a condition","why":"A conditional event with no condition can never fire.","fix":"Give the event a condition expression."},"bpmnlint/conditional-flows":{"title":"Conditional flow without a condition","why":"A flow that leaves a task or event marked as conditional but has no condition either always or never fires; the engine cannot tell.","fix":"Give the flow a condition, or make it an ordinary flow."},"bpmnlint/end-event-required":{"title":"Process or sub-process without an end event","why":"Without an end event the reader cannot see where the process ends, and some engines refuse to run it.","fix":"Add an end event at the end of every path."},"bpmnlint/event-based-gateway":{"title":"Event-based gateway used wrongly","why":"An event-based gateway waits for the first of several events, so it needs at least two ways out and none of them may be conditional.","fix":"Give the gateway two or more outgoing flows to events, and remove their conditions."},"bpmnlint/event-sub-process-typed-start-event":{"title":"Event sub-process start without an event","why":"An event sub-process starts when its event happens, so a blank start event says nothing about when.","fix":"Give the start event a type: message, timer, error, signal or another."},"bpmnlint/fake-join":{"title":"Several flows enter a task that does not join them","why":"Only a gateway joins flows; several flows into a task start the task once for each token, which is rarely what the drawing suggests.","fix":"Join the flows with a gateway of the matching kind before the task."},"bpmnlint/global":{"title":"Global element without a name, unused or not unique","why":"A message, signal or error that is unnamed, never used or named twice cannot be told apart from another.","fix":"Name the element, use it, or delete it."},"bpmnlint/label-required":{"title":"Element without a label","why":"An unlabelled task, event or gateway tells the reader nothing about what happens there.","fix":"Give the element a name."},"bpmnlint/link-event":{"title":"Link event without a name or without its counterpart","why":"A link throw event jumps to the link catch event of the same name in the same scope, so both need that name.","fix":"Name the link events and make each throw match one catch."},"bpmnlint/no-bpmndi":{"title":"Element without a place in the diagram","why":"An element that is in the process but not on the canvas cannot be seen, selected or fixed in the editor.","fix":"Add the element to the diagram, or delete it from the file."},"bpmnlint/no-complex-gateway":{"title":"Complex gateway","why":"A complex gateway holds logic that is written nowhere a reader can see, and few engines support it.","fix":"Replace it with exclusive, inclusive or parallel gateways."},"bpmnlint/no-disconnected":{"title":"Element with no incoming or outgoing flow","why":"An element nothing leads to or from is either forgotten or dead.","fix":"Connect the element to the flow, or delete it."},"bpmnlint/no-duplicate-sequence-flows":{"title":"Two identical flows between the same elements","why":"Two flows from the same source to the same target either do the same twice or say nothing the first one did not.","fix":"Delete the duplicate flow."},"bpmnlint/no-gateway-join-fork":{"title":"Gateway that joins and forks","why":"A gateway that joins flows and forks again in one shape is read as one of the two, and the other is missed.","fix":"Split it into one gateway that joins and one that forks."},"bpmnlint/no-implicit-end":{"title":"Path that ends without an end event","why":"A path that just stops leaves the reader to guess whether it was meant to.","fix":"Add an end event after the last element of the path."},"bpmnlint/no-implicit-split":{"title":"Task that forks the flow without a gateway","why":"Several flows out of a task start all of them at once, or none of them, depending on conditions nobody can see.","fix":"Add a gateway after the task and fork there."},"bpmnlint/no-implicit-start":{"title":"Path that starts without a start event","why":"An element with no incoming flow starts on its own, which is easy to mistake for a forgotten connection.","fix":"Add a start event before the element, or connect it to the path it belongs to."},"bpmnlint/no-inclusive-gateway":{"title":"Inclusive gateway","why":"An inclusive gateway can take any number of ways out, which is hard to read and easy to get wrong.","fix":"Use exclusive or parallel gateways, or keep it and check the conditions with care."},"bpmnlint/no-overlapping-elements":{"title":"Element overlaps another or leaves its parent","why":"Elements drawn over each other hide one another.","fix":"Move the elements apart, or lay the diagram out again."},"bpmnlint/single-blank-start-event":{"title":"More than one blank start event","why":"Two blank start events mean two ways to start the same process with no way to tell them apart.","fix":"Keep one blank start event; give the others a type, or split the process."},"bpmnlint/single-event-definition":{"title":"Event with several event definitions","why":"An event with several definitions is a multiple event, which few engines support and few readers expect.","fix":"Keep one event definition, or use one event for each."},"bpmnlint/standard-size":{"title":"Element not in its standard size","why":"Elements of the standard size make a diagram look even.","fix":"Resize the element to the standard size of its type."},"bpmnlint/start-event-required":{"title":"Process or sub-process without a start event","why":"Without a start event there is no way to start the process.","fix":"Add a start event."},"bpmnlint/sub-process-blank-start-event":{"title":"Sub-process start event with a type","why":"A sub-process starts when the flow reaches it, so its start event has no event to wait for.","fix":"Make the start event blank."},"bpmnlint/superfluous-gateway":{"title":"Gateway with one way in and one way out","why":"A gateway with one flow in and one out does nothing but sit in the way.","fix":"Delete the gateway and connect its neighbours."},"bpmnlint/superfluous-label":{"title":"Label on a flow that needs none","why":"Only the flows out of a decision, the conditional flows and the default flow say something with a label; on any other it repeats the picture.","fix":"Delete the label."},"bpmnlint/superfluous-termination":{"title":"Terminate end event that terminates nothing","why":"A terminate end event outside a parallel path ends the same as an ordinary end event, and suggests something more.","fix":"Use an ordinary end event."},"compat/ad-hoc-sub-process":{"title":"Ad-hoc sub-process without an activity","why":"An ad-hoc sub-process with nothing in it has nothing for the engine to run, so the instance can never complete it.","fix":"Add at least one activity to the ad-hoc sub-process, or delete it."},"compat/agent-fromai-contract":{"title":"fromAi() key that is not a plain name under toolCall","why":"The agent fills a tool parameter through fromAi(toolCall.name); a key written any other way is not found, so the parameter stays empty.","fix":"Write the key as toolCall.name: a single name, with dots, and no quotes, brackets or arithmetic."},"compat/agent-tool-documentation":{"title":"Tool of an AI agent without documentation","why":"The agent picks its tools by their documentation, so a tool with none is hard to choose and easy to misuse.","fix":"Describe what the tool does in its documentation."},"compat/agent-tool-output-key":{"title":"Tool of an AI agent that returns nothing to it","why":"The agent only sees what a tool puts in toolCallResult; without it, or with another spelling or a second writer, the answer is lost.","fix":"Map the result to toolCallResult, spelled exactly like that, once."},"compat/before-all-execution-listener":{"title":"beforeAll listener outside a multi-instance element","why":"A beforeAll execution listener runs before the instances of a multi-instance element are created, so on any other element it has nothing to run before.","fix":"Move the listener to a multi-instance element, or give it another event type."},"compat/element-type":{"title":"Element the engine version cannot run","why":"Each version of Camunda supports a fixed set of elements, and one it does not know is skipped or refused when the process is deployed.","fix":"Replace the element with one the version supports, or raise the platform version of the diagram."},"compat/cancel-execution-listener":{"title":"cancel listener on an element that cannot be cancelled","why":"A cancel execution listener runs when an element is terminated, which only some elements can be, so on the others it never fires.","fix":"Use the listener on an element that supports it, or give it another event type."},"compat/called-element":{"title":"Call activity without a process to call","why":"A call activity that names no process id, or a wrong kind of expression, fails when the instance reaches it.","fix":"Set the called process id, a static one or a FEEL expression."},"compat/collapsed-subprocess":{"title":"Collapsed sub-process","why":"This version of Camunda 8 cannot run a sub-process drawn collapsed on its own diagram, because it has no plane to read it from.","fix":"Expand the sub-process, or raise the platform version of the diagram."},"compat/connector-properties":{"title":"Connector with a property this version does not have","why":"A property of a connector that the engine version does not support yet is ignored, so the connector behaves differently than configured.","fix":"Remove the property, or raise the platform version of the diagram."},"compat/duplicate-execution-listener-headers":{"title":"Two headers of a listener with the same key","why":"A listener that reads a header by its key gets one of the two values, and which one is not defined.","fix":"Give each header of the listener its own key."},"compat/duplicate-execution-listeners":{"title":"Two execution listeners that are the same","why":"Two listeners with the same event type and job type run the same job twice.","fix":"Delete the duplicate listener."},"compat/duplicate-task-headers":{"title":"Two task headers with the same key","why":"A worker that reads a header by its key gets one of the two values, and which one is not defined.","fix":"Give each task header its own key."},"compat/error-reference":{"title":"Error event without an error or an error code","why":"An error event that refers to no error, or to one with no code, catches or throws nothing the engine can match.","fix":"Choose an error for the event and give the error a code."},"compat/escalation-boundary-event-attached-to-ref":{"title":"Escalation boundary event on the wrong element","why":"Escalations are raised inside a sub-process or a call activity, so a boundary event on any other element never catches one.","fix":"Attach the escalation boundary event to a sub-process or call activity."},"compat/escalation-reference":{"title":"Escalation event without an escalation or a code","why":"An escalation event that refers to no escalation, or to one without a code, catches or throws nothing the engine can match.","fix":"Choose an escalation for the event and give it an escalation code."},"compat/event-based-gateway-target":{"title":"Receive task after an event-based gateway","why":"The engine does not accept a receive task as the target of an event-based gateway, so the process is refused when it is deployed.","fix":"Use a message intermediate catch event instead of the receive task."},"compat/executable-process":{"title":"No executable process","why":"Camunda 8 only deploys processes marked executable, so a file in which none is has nothing to run.","fix":"Mark the process, or one of the pools, as executable."},"compat/execution-listener":{"title":"Execution listener without an event type or a job type","why":"A listener needs to know when it runs and which worker handles it; without either the engine refuses it.","fix":"Set the event type and the job type of the listener."},"compat/feel-compatibility":{"title":"FEEL function the engine version does not have","why":"A built-in function newer than the engine fails the expression at runtime with an incident.","fix":"Use a function the version has, or raise the platform version of the diagram."},"compat/feel":{"title":"FEEL expression that is not valid","why":"An expression the engine cannot parse fails as soon as the process reaches it, and stops the instance with an incident.","fix":"Correct the expression named in the finding; the editor of the field shows where it goes wrong."},"compat/history-time-to-live":{"title":"Process without a history time to live","why":"Without a time to live the engine keeps the history of every finished instance for ever unless it is set for the whole engine, and the database grows.","fix":"Set the history time to live of the process, for example P30D, or set it once for the engine."},"compat/implementation":{"title":"Task or event that has nothing to run","why":"A service task, business rule task, script task, send task or message event that names no job type, decision, script or message does nothing when reached.","fix":"Set what the element runs: a job type, a called decision, a script or a message name."},"compat/inclusive-gateway":{"title":"Inclusive gateway with more than one way in","why":"Camunda 8 before 8.6 can take an inclusive gateway only as a fork, so one that also joins is refused.","fix":"Use one gateway to fork and another to join, or raise the platform version of the diagram."},"compat/link-event":{"title":"Link events that do not match","why":"A link throw event jumps to the catch event with the same name in the same scope, so a name used twice or by no catch event leads nowhere.","fix":"Give every link catch event a unique name and let each throw event use one of them."},"compat/loop-characteristics":{"title":"Multi-instance without what it needs","why":"A multi-instance element with no input collection, or with an output collection but no output element, has nothing to iterate over or to gather.","fix":"Set the input collection, and the output element when there is an output collection."},"compat/io-mapping":{"title":"Input or output mapping that is incomplete","why":"A mapping needs both the source and the target it maps to; one without either is refused by the engine.","fix":"Fill in the source and the target of every input and output mapping."},"compat/message-reference":{"title":"Message event without a message or its name","why":"A message event that refers to no message, or to one without a name, can never be correlated with anything.","fix":"Choose a message for the event and give the message a name."},"compat/no-binding-type":{"title":"Binding type that this version does not have","why":"A called process, decision or form bound to anything but the latest version needs Camunda 8.6 or newer; on an older one the binding is ignored.","fix":"Bind to the latest version, or raise the platform version of the diagram."},"compat/no-business-id":{"title":"Business id that this version does not have","why":"A business id on a call activity needs Camunda 8.10 or newer; on an older version it is ignored.","fix":"Remove the business id, or raise the platform version of the diagram."},"compat/no-before-all-execution-listener":{"title":"beforeAll listener that this version does not have","why":"The beforeAll event type of an execution listener needs Camunda 8.10 or newer.","fix":"Use another event type, or raise the platform version of the diagram."},"compat/no-candidate-users":{"title":"Candidate users that this version does not have","why":"Candidate users on a user task need Camunda 8.2 or newer; on an older version they are ignored.","fix":"Remove the candidate users, or raise the platform version of the diagram."},"compat/no-cancel-execution-listener":{"title":"cancel listener that this version does not have","why":"The cancel event type of an execution listener needs Camunda 8.10 or newer.","fix":"Use another event type, or raise the platform version of the diagram."},"compat/no-execution-listener-headers":{"title":"Listener headers that this version does not have","why":"Task headers on an execution listener are not supported by this version of Camunda 8 and are ignored.","fix":"Remove the headers, or raise the platform version of the diagram."},"compat/no-execution-listeners":{"title":"Execution listeners that this version does not have","why":"Execution listeners need Camunda 8.6 or newer; on an older version they are ignored.","fix":"Remove the listeners, or raise the platform version of the diagram."},"compat/no-expression":{"title":"Expression this version does not support","why":"A FEEL expression in a property the engine version reads only as a fixed value is taken as text, not evaluated.","fix":"Write a static value, or raise the platform version of the diagram."},"compat/no-interrupting-event-subprocess":{"title":"Interrupting event sub-process in an ad-hoc sub-process","why":"An event sub-process inside an ad-hoc sub-process cannot interrupt it, so an interrupting start event is refused.","fix":"Make the start event of the event sub-process non-interrupting."},"compat/no-job-priority-definition":{"title":"Job priority that this version does not have","why":"A job priority needs Camunda 8.10 or newer; on an older version it is ignored.","fix":"Remove the job priority, or raise the platform version of the diagram."},"compat/no-loop":{"title":"Loop that never waits","why":"A cycle made only of tasks and gateways that run at once never waits for anything, so the instance spins in it and never stops.","fix":"Put an element that waits into the loop, such as a user task or a timer, or give it a gateway condition that leaves it."},"compat/no-multiple-none-start-events":{"title":"More than one blank start event","why":"Camunda 8 accepts only one blank start event in a process, so a second one makes the deployment fail.","fix":"Keep one blank start event and give the others an event type, or split the process."},"compat/no-priority-definition":{"title":"Priority that this version does not have","why":"A priority on a user task needs Camunda 8.6 or newer; on an older version it is ignored.","fix":"Remove the priority, or raise the platform version of the diagram."},"compat/no-propagate-all-parent-variables":{"title":"Propagate all parent variables that this version does not have","why":"Turning off the propagation of the parent variables of a call activity needs Camunda 8.2 or newer.","fix":"Keep propagation on, or raise the platform version of the diagram."},"compat/no-signal-event-sub-process":{"title":"Signal event sub-process that this version does not have","why":"A signal start event in an event sub-process needs a newer version of Camunda 8 than the diagram declares.","fix":"Use another kind of start event, or raise the platform version of the diagram."},"compat/no-task-schedule":{"title":"Task schedule that this version does not have","why":"A due date or follow-up date on a user task needs Camunda 8.2 or newer; on an older version it is ignored.","fix":"Remove the dates, or raise the platform version of the diagram."},"compat/no-task-listeners":{"title":"Task listeners that this version does not have","why":"Task listeners on a user task need Camunda 8.8 or newer; on an older version they are ignored.","fix":"Remove the task listeners, or raise the platform version of the diagram."},"compat/no-template":{"title":"Element template that this version does not have","why":"Element templates need Camunda 8.0 or newer; on an older version the properties they set are ignored.","fix":"Remove the template, or raise the platform version of the diagram."},"compat/no-version-tag":{"title":"Version tag that this version does not have","why":"A version tag needs Camunda 8.6 or newer; on an older version it is ignored.","fix":"Remove the version tag, or raise the platform version of the diagram."},"compat/no-zeebe-properties":{"title":"Zeebe properties that this version does not have","why":"Custom zeebe:properties need Camunda 8.1 or newer; on an older version they are dropped when the process is deployed.","fix":"Remove the properties, or raise the platform version of the diagram."},"compat/no-zeebe-user-task":{"title":"Camunda user task that this version does not have","why":"A user task implemented by Camunda itself needs Camunda 8.5 or newer.","fix":"Use a job worker user task, or raise the platform version of the diagram."},"compat/priority-definition":{"title":"User task priority that is not valid","why":"The priority of a user task has to be a whole number from 0 to 100, or an expression; anything else is refused.","fix":"Write the priority as a number from 0 to 100, or as an expression."},"compat/zeebe-user-task":{"title":"Job worker user task","why":"A user task run by a job worker is the deprecated way; a Camunda user task is the supported one from this version on.","fix":"Switch the user task to the Camunda user task implementation."},"compat/secrets":{"title":"Secret written in a form the engine no longer reads","why":"A secret referenced as {{secrets.NAME}} or in the old connector syntax is deprecated and is dropped in a later version.","fix":"Write the secret as a FEEL expression, camunda.secrets.NAME."},"compat/sequence-flow-condition":{"title":"Condition on a flow that cannot have one","why":"Only the flows that leave an exclusive or an inclusive gateway are conditional; on any other flow the condition is refused.","fix":"Delete the condition, or draw a gateway in front of the flow."},"compat/signal-reference":{"title":"Signal event without a signal or its name","why":"A signal event that refers to no signal, or to one without a name, can never be raised or caught.","fix":"Choose a signal for the event and give the signal a name."},"compat/start-event-form":{"title":"Start event form that this version cannot show","why":"Before Camunda 8.3 a start event has no form, and from 8.3 the form needs a form id or a linked form that exists.","fix":"Set the form id or the form key of the start event, or raise the platform version of the diagram."},"compat/start-event-form-embedded":{"title":"Embedded form on a start event","why":"Embedded forms on a start event are deprecated in this version and stop working in a later one.","fix":"Move the form to a .form file and link it from the start event."},"compat/subscription":{"title":"Message without a correlation key","why":"A message that a process waits for needs a correlation key, or the engine cannot tell which instance it is meant for.","fix":"Set the correlation key of the message subscription, usually a FEEL expression."},"compat/task-listener":{"title":"Task listener without an event type or a job type","why":"A task listener needs to know when it runs and which worker handles it; without either the engine refuses it.","fix":"Set the event type and the job type of the listener."},"compat/task-schedule":{"title":"Task schedule that is not a date","why":"The due date and the follow-up date of a user task have to be an ISO 8601 date, or an expression that gives one.","fix":"Write the date in ISO 8601, or use an expression."},"compat/timer":{"title":"Timer that is not valid","why":"A timer with a date, duration or cycle the engine cannot read fails when the process is deployed or reached.","fix":"Write the timer as an ISO 8601 date, duration or cycle, or as an expression."},"compat/timer-past-date":{"title":"Start timer set in the past","why":"A timer start event whose date, or whose cycle start, is already past fires right after deployment, and a cycle then runs from the deployment time.","fix":"Use a future date, or a cron expression to run on a fixed schedule."},"compat/unresolvable-secret-reference":{"title":"Secret used in a way the engine cannot resolve","why":"A secret can only be read as an expression; written as a plain string, in a list or in a branch of an if it is never replaced.","fix":"Use =camunda.secrets.NAME directly as the value of the property."},"compat/user-task-definition":{"title":"User task without a form","why":"A user task with no form opens in Tasklist with nothing for the person to read or fill in.","fix":"Link a form to the user task, or accept a task without one."},"compat/user-task-form":{"title":"User task form that is not filled in","why":"A form on a user task needs the form id, or the linked form, in the form the chosen binding expects; without it the task opens with no form.","fix":"Set the form id, or the form key, the way its binding says."},"compat/variable-name":{"title":"Variable name that is not valid","why":"A name that starts with a digit or holds a space or a dash cannot be used in a FEEL expression, so it can never be read again.","fix":"Use a name of letters, digits and underscores that does not start with a digit."},"compat/version-tag":{"title":"Version tag that is empty","why":"A version tag that is set with no value, or a binding to a version tag with none, gives the engine nothing to look up.","fix":"Give the version tag a value, or choose another binding."},"compat/wait-for-completion":{"title":"Compensation that does not wait","why":"A compensation throw event that does not wait for completion is not supported by Camunda 8, which always waits.","fix":"Turn on waiting for completion of the compensation event."},"drawing/dangling-connection":{"title":"Connection without both ends","why":"A connection that starts or ends on nothing is drawn but connects nothing, so the picture and the process disagree.","fix":"Reconnect both ends of the connection to a shape, or delete it."},"drawing/lost-connection":{"title":"Connection in the file but not on the canvas","why":"The file describes a connection that the editor did not draw, so it is invisible and cannot be selected.","fix":"Connect the two elements again on the canvas; the stray connection is dropped when the file is saved."},"drawing/containment":{"title":"Element outside the container it belongs to","why":"An element that belongs to a pool, lane or sub-process but is drawn beyond its edge reads as belonging to something else.","fix":"Drag the element back inside its container, or enlarge the container."},"drawing/overlap":{"title":"Shapes sit on top of each other","why":"Shapes drawn over each other hide one another, and the one underneath cannot be selected.","fix":"Move one of the shapes, or lay the diagram out again."},"drawing/edge-through-node":{"title":"Connection runs through a shape","why":"A connection drawn through a shape it does not touch looks like it connects to that shape.","fix":"Move a bend of the connection, or the shape, so the line goes around."},"drawing/edge-through-boundary":{"title":"Connection runs through a boundary event","why":"A connection drawn through a boundary event it does not start or end at looks like it leaves the task through that event.","fix":"Move the boundary event along the border of its task, away from where the connection meets the task."},"drawing/crossing":{"title":"Connections cross","why":"Every crossing is a place where the eye can follow the wrong line.","fix":"Move a shape so fewer connections have to cross, or lay the diagram out again."},"drawing/detached-edge":{"title":"Connection does not reach the shape it connects","why":"A connection that stops short of its shape looks unfinished and does not move with the shape.","fix":"Drag the loose end of the connection onto the shape."},"drawing/boundary-off-host":{"title":"Boundary event is off its host","why":"A boundary event that is not on the border of the task it is attached to looks like a free-standing event.","fix":"Drag the boundary event back onto the border of its task."},"drawing/label-adrift":{"title":"Label sits far from what it names","why":"A label far from its element is read as the label of something nearer.","fix":"Drag the label next to its element."},"drawing/diagonal-edge":{"title":"Connection is not drawn at right angles","why":"A BPMN diagram reads as horizontal and vertical lines; a slanted one stands out as a mistake.","fix":"Straighten the segment, or lay the diagram out again."},"drawing/label-overlap":{"title":"Labels cover each other","why":"Overlapping labels cannot be read.","fix":"Drag one of the labels aside."},"drawing/merged-edge":{"title":"Connections run along the same line","why":"Two connections drawn on top of each other read as one, so a reader loses one of them.","fix":"Move one of the connections a few pixels aside, or lay the diagram out again."},"drawing/note-adrift":{"title":"Annotation sits far from what it describes","why":"An annotation far from its element is hard to tie to it.","fix":"Drag the annotation next to the element it describes."},"drawing/semantic-drift":{"title":"The diagram means something different","why":"Laying out must move things and change nothing else; an element with a different parent, source or target is a different process.","fix":"Undo the change and report it: no layout should ever do this."},"drawing/backtrack":{"title":"Connection doubles back along itself","why":"A line that overshoots and returns along itself reads as one line and hides its own bend.","fix":"Delete the extra bend of the connection."},"drawing/edge-through-label":{"title":"Connection crosses a label","why":"A line through a label makes both harder to read.","fix":"Drag the label off the line."},"drawing/edge-along-shape":{"title":"Connection runs along the border of a shape","why":"A line lying on the edge of a shape it does not belong to looks like part of that shape.","fix":"Move the run of the connection a few pixels away from the shape."},"drawing/detour":{"title":"Connection takes a long way round","why":"A connection more than twice as long as the distance it covers makes the reader search for its end.","fix":"Move the shapes closer, or give the connection a shorter route."},"drawing/jog":{"title":"Connection sidesteps for no reason","why":"A small sidestep between two parallel runs, with nothing in the way, looks like a slip of the hand.","fix":"Delete the two bends of the sidestep."},"flow/deadlock":{"title":"The process can get stuck","why":"A token can reach a point where nothing can move it on, so the instance never ends and sits in the engine forever.","fix":"Follow the path shown in the finding and give the stuck join a way to continue, for example by joining only what was split."},"flow/no-synchronization":{"title":"A part of the process can run twice","why":"Two paths that reach the same step without a joining gateway start it once for each, so the step runs twice.","fix":"Join the paths with a gateway of the matching kind before the step."},"flow/dead-element":{"title":"An element can never run","why":"No path from the start reaches the element, so whatever it does is dead weight in the diagram.","fix":"Connect it to a path that can reach it, or delete it."},"flow/never-finishes":{"title":"The process may never finish","why":"A loop with no way out keeps its instance alive until someone cancels it.","fix":"Give the loop an exit: a condition that ends it, or a flow that leaves it."},"flow/too-complex":{"title":"Only part of the process was analysed","why":"The process has too many states to check them all, so what the check says is true only of the part it reached.","fix":"Split the process into sub-processes or call activities so each can be checked whole."},"flow/no-way-out":{"title":"A decision has no way out for some values","why":"When no condition of a gateway holds and there is no default flow, the instance stops there with an incident.","fix":"Add a default flow, or a condition for the values named in the finding."},"flow/overlap":{"title":"Two ways out of a decision can both hold","why":"When two conditions of an exclusive gateway can both be true the engine takes whichever it checks first, and which one that is depends on the order in the file.","fix":"Make the conditions exclusive, or turn one of them into the default flow."},"flow/no-default":{"title":"A decision may have no way out","why":"A gateway with conditions and no default flow stops the instance with an incident when none of them holds.","fix":"Mark one outgoing flow as the default."},"flow/lookalike":{"title":"Two variables look like one","why":"Two variable names that differ by a letter or its case are usually one name spelled twice, and one of them never holds the value the other does.","fix":"Use one spelling everywhere, or make the names differ clearly."},"table/rule-overlap":{"title":"Two rules match the same input","why":"When the hit policy expects one match, two rules matching the same input make the decision fail or depend on their order.","fix":"Narrow one of the two rules so they no longer match the same input, or change the hit policy."},"table/rule-gap":{"title":"No rule matches some input","why":"An input no rule matches gives the decision no result, and the process that asked for it stops.","fix":"Add a rule for the input named in the finding, or a catch-all rule at the end."},"table/table-unread":{"title":"A decision table could not be checked","why":"A table with an expression the check cannot read is left out of it, so its problems are not found.","fix":"Simplify the expression in the cell named in the finding, or accept that this table is not checked."},"form/key-clash":{"title":"Two fields write the same variable","why":"Tasklist and the form editor refuse to open a form in which two fields, or a field and a group, use the same key.","fix":"Give each field its own key."},"form/no-key":{"title":"A field writes no variable","why":"A field with no key is shown to the user, but what they enter is not passed to the process.","fix":"Give the field a key, the name of the process variable it should fill."},"form/repeated-option":{"title":"An option list repeats a value","why":"Two choices with the same value submit the same thing, though the user can tell them apart.","fix":"Give every option its own value."},"form/no-label":{"title":"A field has no label","why":"An input with no label leaves the user guessing what it is for.","fix":"Give the field a label."},"code/missing-implementation":{"title":"Nothing in the code runs a step","why":"A service task, send task or listener that names a job type, topic, class or bean nothing implements waits for a worker that does not exist.","fix":"Write the worker, delegate or bean, or correct the name in the diagram."},"code/never-thrown":{"title":"Nothing in the code throws the error a step catches","why":"An error boundary or error event catches a code that no BpmnError or error command in the project throws, so it never fires.","fix":"Throw the error code from the worker, or correct the code on the event."},"code/variable-typo":{"title":"A variable is read, but only a similar one is set","why":"A read of a name that is never written, when a name a letter away is, is almost always a typo, and the read gives nothing.","fix":"Use the spelling that is set."},"code/worker-fetch":{"title":"A worker reads a variable it does not fetch","why":"A Camunda 8 worker is given only the variables it asks for, so a name its code reads but its fetch list leaves out is null at runtime, and a name a fetch list holds under a different spelling is null as well.","fix":"Add the variable to the worker's fetchVariables, or use the name it fetches."},"code/writer-unread":{"title":"A worker sets a variable no step after it reads","why":"A variable the worker writes and nothing downstream reads is written for nothing; often the name is not the one the next step looks for.","fix":"Read it in a later step, or drop it from the worker."},"code/lost-update":{"title":"Every parallel instance writes the same result collection","why":"A parallel multi-instance step that sets an output collection without an output element has each instance write the same collection, so only the last one that finishes is left.","fix":"Set an output element, or collect the results in one instance after the join."},"code/late-read":{"title":"A worker reads a variable no step before it sets","why":"The worker is handed only the variables the process set before it, so a name it reads that nothing set before it is null at runtime.","fix":"Set the variable in an earlier step, or drop it from the worker."},"code/near-name":{"title":"A job type, topic, bean, message or error code is one letter off the code","why":"A name that does not match the one in the code leaves the step with nothing running it, and a name that differs only in case is the same trap with a quieter error.","fix":"Use the name the code has, or rename the worker to the one the diagram uses."},"code/mapping-order":{"title":"A mapping line reads a value an earlier line was meant to set","why":"The engine evaluates the source of every mapping line before it writes any target, so a later line that reads what an earlier one sets gets null - camunda#11789.","fix":"Move the value into the earlier line, or compute both from the same source."},"code/implicit-job-type":{"title":"A job worker takes its job type from the method name","why":"A @JobWorker without a type answers to its method name, so renaming the method changes the contract with the diagram without anything saying so.","fix":"Name the type in the annotation, so the method can be renamed freely."},"code/no-worker":{"title":"No worker handles a job type","why":"A Camunda 8 service task creates a job that waits for a worker with its job type; with none, the instance waits forever.","fix":"Write a worker for the job type, or correct the job type in the diagram."},"code/no-topic-worker":{"title":"No external task worker subscribes to a topic","why":"A Camunda 7 external task waits for a client that subscribes to its topic; with none, the instance waits forever.","fix":"Subscribe a worker to the topic, or correct the topic in the diagram."},"code/class-missing":{"title":"A class named in the diagram is not in the project","why":"A delegate or listener class the engine cannot load fails the instance at that step.","fix":"Add the class, or correct the class name in the diagram."},"code/bean-missing":{"title":"No Spring bean has the name a diagram uses","why":"A delegate expression naming a bean that does not exist fails the instance at that step.","fix":"Name the bean the diagram uses, or correct the expression."},"code/unknown-process":{"title":"A call activity calls a process no diagram defines","why":"A call to a process that is not deployed fails the instance at the call.","fix":"Add the called process to the project, or correct the id of the call."},"code/unknown-decision":{"title":"A business rule task calls a decision no file defines","why":"A call to a decision that is not deployed fails the instance at the task.","fix":"Add the decision to the project, or correct its id in the task."},"code/unknown-form":{"title":"A user task shows a form no file defines","why":"A user task that refers to a form that is not deployed opens with no form.","fix":"Add the .form file, or correct the form id in the task."},"code/unknown-embedded-form":{"title":"A user task shows an embedded form the diagram does not contain","why":"A user task that refers to an embedded form that is not in the diagram opens with no form.","fix":"Add the form to the diagram, or correct the reference."},"code/unused-worker":{"title":"A worker for a job type no diagram uses","why":"A worker that nothing calls is code to keep for nothing, and hides that a diagram lost its step.","fix":"Delete the worker, or add the step that uses its job type."},"code/unused-subscription":{"title":"A subscription to a topic no diagram uses","why":"A subscription nothing feeds is code to keep for nothing, and hides that a diagram lost its step.","fix":"Delete the subscription, or add the step that uses its topic."},"code/variable-field":{"title":"A step reads a field the variable does not have","why":"A field the type of a variable does not have is null at runtime, and a misspelt field name is the usual cause. Only a variable whose type is known from the code that sets it is checked, so a field of a type the project does not declare is never reported.","fix":"Use a field the type has, or correct the name; a field the code adds later is named in its class."},"code/variable-unknown":{"title":"A step reads a variable nothing sets","why":"A name no step of the diagram or the code sets, and that the process is not declared to start with under variables.inputs, is null unless something outside starts the process with it.","fix":"Set the variable in an earlier step, declare it under variables.inputs in penstock.yaml, or correct the name."},"convention/id-from-name":{"title":"Ids follow names","why":"Ids that read as names make diffs, logs, test cases and worker code readable, and stay right when a step is renamed.","fix":"Set \`conventions.ids.fromName: true\` in \`penstock.yaml\`; \`conventions.ids.pattern\` shapes the id, \`{Type}_{Name}\` by default."},"convention/defaults":{"title":"Defaults for new elements","why":"Attributes every service task or data input of a project needs, set once, are never forgotten on one of them.","fix":"Set them under \`conventions.defaults\` in \`penstock.yaml\`, keyed by BPMN type such as \`bpmn:ServiceTask\`."},"compat":{"badBoundaryHost":"{subject} is attached to something that cannot have this kind of boundary event","callsNoDecision":"{subject} calls no decision and has no job type","callsNoProcess":"{subject} calls no process","cannotUseExpression":"{subject} cannot use an expression in its {property}","conditionNotAllowedHere":"{subject} has a condition, but only the flows out of an exclusive or inclusive gateway can have one","deprecatedSecret":"{subject} writes a secret in a form that is deprecated","duplicateLinkName":"Two link catch events use the same name","element":"element","elementNeedsVersion":"{elements} need Camunda {allowed} or newer{targets}","expressionNeeds":"{subject} uses an expression in its {property}, which {needs}","fallback":"{subject}: {message}","formWithNoId":"{subject} has a form with no form id","hasNoForm":"{subject} has no form","hasNoJobType":"{subject} has no job type","hasNoScript":"{subject} has no script and no job type","here":"here","historyTimeToLiveMissing":"History time to live is missing","invalidAgentSetting":"{subject} has an AI agent setting that is not valid","invalidFeelExpression":"{subject} has a FEEL expression that is not valid","isCollapsed":"{subject} is collapsed, and this version of Camunda needs it expanded","isJobWorkerUserTask":"{subject} is a job worker user task, and a Camunda user task is the supported kind","joinOr":"{list} or {last}","loopThatNeverWaits":"{subject} is part of a loop that never waits","messageWithoutCorrelationKey":"{subject} waits for a message that has no correlation key","missingExtension":"{subject} is missing its {required} settings","missingInputCollection":"{subject} is multi-instance, but its input collection is missing","missingProperty":"{subject} is missing its {list}","moreThanOneBlankStart":"There is more than one blank start event, and Camunda allows one in a process","moreThanOneElement":"There is more than one {kind} in the same scope, and only one is allowed","needs":"needs Camunda {allowed} or newer{targets}","needsConditionOrDefault":"{subject} needs a condition, or must be the default flow of its gateway","needsPropertyBefore":"{subject} needs its {list} on versions before Camunda {allowed}{targets}","noActivityInside":"{subject} has no activity inside it","notExecutable":"{subject} is not marked as executable","receiveTaskAfterGateway":"A receive task cannot follow an event-based gateway in Camunda 8; use a message catch event","targets":" - this diagram targets {version}","theKind":"The {kind}","thisElement":"This element","unreadableVariableName":"{subject} uses a variable name the engine cannot read","unresolvableSecret":"{subject} refers to a secret in a way the engine cannot resolve","unsupportedFeelFunction":"{subject} uses a FEEL function that Camunda {version} does not have","usesProperty":{"a":"{subject} uses a {property}, which {needs}","an":"{subject} uses an {property}, which {needs}"},"usesExtension":{"a":"{subject} uses a {extension}, which {needs}","an":"{subject} uses an {extension}, which {needs}"},"propertyValueNeeds":{"a":"{subject} has a {property} value that {needs}","an":"{subject} has an {property} value that {needs}"},"propertyValueNotAllowed":{"a":"{subject} has a {property} value that is not allowed here","an":"{subject} has an {property} value that is not allowed here"},"deprecatedProperty":{"a":"{subject} uses a {property}, which is deprecated","an":"{subject} uses an {property}, which is deprecated"},"cannotHaveProperty":{"a":"{subject} cannot have a {property}","an":"{subject} cannot have an {property}"},"cannotHaveExtension":{"a":"{subject} cannot have a {extension}","an":"{subject} cannot have an {extension}"},"refersToNoMessage":"{subject} refers to no message","refersToNoError":"{subject} refers to no error","refersToNoSignal":"{subject} refers to no signal","refersToNoEscalation":"{subject} refers to no escalation","word":{"adHoc":"ad-hoc","agentDefinition":"agent definition","assignmentDefinition":"assignment definition","bindingType":"binding type","body":"body","businessId":"business id","calledDecision":"called decision","calledElement":"called element","cancelRemainingInstances":"cancel remaining instances","candidateUsers":"candidate users","completionCondition":"completion condition","conditionExpression":"condition expression","consumeUnmatchedEvents":"consume unmatched events","correlationKey":"correlation key","decisionId":"decision id","deduplicationModeManualFlag":"deduplication mode manual flag","dueDate":"due date","errorCode":"error code","errorRef":"error reference","escalationCode":"escalation code","escalationRef":"escalation reference","eventType":"event type","executionListeners":"execution listeners","expression":"expression","externalReference":"external reference","followUpDate":"follow up date","formDefinition":"form definition","formId":"form id","formKey":"form key","headers":"headers","historyTimeToLive":"history time to live","incoming":"incoming","inputCollection":"input collection","inputElement":"input element","ioMapping":"io mapping","isExecutable":"is executable","isInterrupting":"is interrupting","jobPriorityDefinition":"job priority definition","loopCharacteristics":"loop characteristics","messageRef":"message reference","messageTtl":"message ttl","modelerTemplate":"modeler template","name":"name","outputCollection":"output collection","outputElement":"output element","priority":"priority","priorityDefinition":"priority definition","processId":"process id","propagateAllParentVariables":"propagate all parent variables","properties":"properties","resultVariable":"result variable","script":"script","signalRef":"signal reference","source":"source","subscription":"subscription","target":"target","taskDefinition":"task definition","taskHeaders":"task headers","taskListeners":"task listeners","taskSchedule":"task schedule","timeCycle":"time cycle","timeDate":"time date","timeDuration":"time duration","type":"type","userTask":"user task","userTaskForm":"user task form","value":"value","versionTag":"version tag","waitForCompletion":"wait for completion"}},"defects":{"boundaryOffHost":"{event} off {host}","containment":"{id} {relation} {box}","crossing":"[{aType}|{bType}] {a} ({aFrom}->{aTo}) x {b} ({bFrom}->{bTo})","detour":"[{type}] {id} runs {run}px for {apart}px","edgeAlongShape":"{connection} runs along {shape}","edgeOverLabel":"{connection} over {owner} label","edgeThroughBoundary":"{connection} through {event} on {host}","edgeThroughNode":"{connection} through {shape}","insideForeign":"inside foreign","labelFromLine":"{id} label {gap}px from its own line","labelFromShape":"{id} label {gap}px from its shape","labelOverLabel":"{owner} label over {other} label","labelOverShape":"{owner} label over {shape}","mergedEdge":"[{aType}|{bType}|{axis}] {a} ({aFrom}->{aTo}) with {b} ({bFrom}->{bTo}) over {run}px","noteAdrift":"{id} ({from}->{to}) runs {span}px","outsideIts":"outside its","overlap":"{a} <-> {b}","semanticDrift":"{id} was {was}, now {now}","straddles":"straddles","typedWire":"[{type}] {id} ({from}->{to})","wire":"{id} ({from}->{to})"},"drawing":{"listSeparator":", ","noProblemsFound":"No problems found.","readability":"{number} readability","rulesCouldNotRun":"The bpmnlint rules could not run.","theConnection":"the connection from {from} to {to}","theElement":"the {type}","errors":{"one":"{count} error","other":"{count} errors"},"warnings":{"one":"{count} warning","other":"{count} warnings"}},"flow":{"above":"above","anActivity":"an activity","and":" and ","arrive":"arrive","arrives":"arrives","atLeast":"at least","atMost":"at most","below":"below","bothConditionsHold":"When {shared}, both {first} and {second} of {gateway} hold; the engine takes whichever it checks first.","comma":", ","exclusive":" (exclusive)","hasAnyValue":"{variable} has any value","isAnythingBut":"{variable} is anything but {values}","isBetween":"{variable} is between {lo} and {hi}{exclusive}","isBound":"{variable} is {side} {bound}","isSomeOtherValue":"{variable} is some other value","isValue":"{variable} is {bound}","leftThroughBoundary":" The run left {host} through its boundary event{event} and never came back.","letterCaseOnly":"letter case only","lookalikeNames":"\\"{first}\\" and \\"{second}\\" are used in this process and differ by {difference}: one of them is probably a typo, and would never hold the value the other one does.","neverRuns":"{node} never runs: {cause}.","noDefaultFlow":"{gateway} has no default flow. If none of its conditions holds, the process stops there with an incident.","noPathReachesIt":"no path from a start event reaches it","noPathToAnEnd":"Once the process reaches {nodes}, no path leads to an end: it can only go round.","noWayOut":"{gateway} has no flow to take when {gaps}, and no default flow: the process stops there with an incident.","nodeBefore":"the {node} before \\"{next}\\"","nothingLeadsToIt":"nothing leads to it","oneCharacter":"one character","orWhen":", or when ","sentDownAnotherBranch":" {turn} sent this run down another branch.","theBranchThrough":"the branch through the {node}","theFlowTo":"the flow to {target}","theNextStep":"the next step","theNode":"the {node}","tooManyStates":"The process has more than {states} reachable states; the findings cover the part that was explored.","twoBranchesAtOnce":"Two branches that run at the same time both reach {node}, so it runs twice. Join them with a parallel gateway first.","twoTokensAtOnce":"Two tokens can arrive at {node} at once, so it runs twice. A parallel split usually needs a parallel join, not an exclusive one.","waitsAndCannotContinue":"{who} waits and cannot continue.","waitsFor":"{who} waits for {missing}, which never {arrives}."},"form":{"keyClash":"{fields} {all} write {variable}. A form like that does not open: Tasklist and the form editor refuse it.","keyClashGroup":"{field} writes {variable}, which {group} also uses to hold its fields. A form like that does not open: Tasklist and the form editor refuse it.","noKey":"{field} has no key, so what the user enters is not passed to the process.","noLabel":"The {type} writing {variable} has no label, so the user sees an input with nothing to say what it is for.","repeatedOption":"{field} offers the value {values} more than once, so two choices the user can tell apart submit the same thing.","unnamedField":"the {type}{key}{id}"},"lint":{"couldNotRun":"The rule could not run: {message}","decidesNothing":"{what} has one way in and one way out, so it decides nothing","discouragedGateway":"{what} is a kind of gateway that is discouraged","endsWithoutEndEvent":"{what} ends the flow without an end event","hasNoEndEvent":"{what} has no end event","hasNoName":"{what} has no name","hasNoShape":"{what} has no shape on the diagram","hasNoStartEvent":"{what} has no start event","itsContainer":"{what} lies outside {parent}","itsLane":"its lane","itsPool":"its pool","itsShape":"the shape it belongs to","itsSubProcess":"its sub-process","joinedWithoutGateway":"{what} is joined by several flows without a gateway","joinsAndSplits":"{what} both joins and splits the flow, which reads as two gateways","linkEvent":"{what}: {message}","lowercaseLink":"link ","moreThanOneBlankStart":"{what} has more than one blank start event","needsConditionOrDefault":"{what} needs a condition or must be the default flow","notConnected":"{what} is not connected to anything","overlapsAnotherShape":"{what} overlaps another shape","splitsWithoutGateway":"{what} splits the flow without a gateway","startsWithoutStartEvent":"{what} starts the flow without a start event","theElement":"The {type}","thisElement":"This element","twoIdenticalFlows":"{what} has two identical flows","unneededTermination":"{what} ends the process with a termination it does not need","conditionalEventNoCondition":"Conditional event is missing a condition","eventBasedGatewayNeedsTwo":"An <Event-based Gateway> must have at least 2 outgoing <Sequence Flows>","flowOutOfEventBasedGatewayConditional":"A <Sequence Flow> outgoing from an <Event-based Gateway> must not be conditional","typedStartEventNoDefinition":"Start event is missing event definition","eventHasSeveralDefinitions":"Event has multiple event definitions","startEventMustBeBlank":"Start event must be blank","sequenceFlowSuperfluousLabel":"Sequence flow has superfluous label","startEventInAdHoc":"A <Start Event> is not allowed in <Ad Hoc Sub Process>","endEventInAdHoc":"An <End Event> is not allowed in <Ad Hoc Sub Process>","nonStandardWidth":"Element has a non-standard width; expected width of {width}","nonStandardHeight":"Element has a non-standard height; expected height of {height}","nonStandardSize":"Element has a non-standard size; expected {width}x{height}"},"table":{"aDecision":"a decision","and":" and ","differentResults":", and give different results","input":"input {number}","orWhen":"; or when ","ruleGap":"In \\"{decision}\\", no rule matches when {cases}, so the decision returns nothing there.","ruleOverlap":"In \\"{decision}\\", rules {first} and {second} both match when {when}{different}; with hit policy {policy} that is an error at run time.","someOtherValue":"some other value","unread":"\\"{decision}\\" uses expressions in its rules that are more than comparisons, ranges and lists, so its rules were not compared.","whenIs":"{label} is {value}"},"web":{"detailWithPath":"{detail} Path: {path}","flowAnalysisHint":"Deadlocks, branches that run twice, steps that never run. Part of Penstock Pro.","migrateToCamunda8":"Migrate to Camunda 8","nothingToConvert":"Nothing to convert: this is not a Camunda 7 diagram.","path":"Path: {path}","readability":"Readability ({number})","rulesCouldNotRun":"The bpmnlint rules could not run: {failure}. Rules from a bpmnlint plugin need lint.clientBundlePath in penstock.yaml.","flowAnalysisFound":{"one":"Flow analysis found 1 problem in how this process runs","other":"Flow analysis found {count} problems in how this process runs"}},"workers":{"aWorkerIsWorking":"a worker is working on its tasks","engineAnswered":"The engine answered {status}","noJobStatistics":"The engine does not report job statistics, which it does from Camunda 8.9","noJobs":"no jobs in the last 24 hours","noOpenTasks":"no open tasks","nobodyTookThem":"{jobs} in the last 24 hours and no worker took one","refusedTheQuestion":"The engine refused the question ({status}): the profile's credentials may not allow reading jobs","tasksWait":"tasks wait and no worker has locked one","tookItsJobs":"{workers} took its jobs in the last 24 hours","workerCount":{"one":"{count} worker","other":"{count} workers"},"jobCount":{"one":"{count} job","other":"{count} jobs"}},"theKindOf":"the {kind}","engine/foreign-extension":{"title":"Extension of another engine","why":"Flowable and Activiti ignore the attributes and elements of the Camunda, Zeebe, Operaton and each other's namespaces, so what they set is silently lost at run time.","fix":"Replace it with the extension of the engine the diagram is written for, or remove it."},"engine/unknown-attribute":{"title":"Attribute the engine does not know","why":"An attribute in the engine's own namespace that the engine does not read is usually a typo, and has no effect.","fix":"Correct the attribute name, or remove it."},"engine/attribute-not-allowed":{"title":"Attribute on the wrong kind of element","why":"An engine attribute is read only on the elements it is defined for, so on any other element it has no effect.","fix":"Move the attribute to an element that takes it, or remove it."},"engine/unsupported-element":{"title":"Element the engine does not support","why":"An element that Flowable or Activiti cannot execute fails the deployment or never runs.","fix":"Replace the element with one the engine supports."},"engine/service-task-implementation":{"title":"Service task with nothing to run","why":"A service task without a class, an expression, a delegate expression or a type has nothing for the engine to call, so the deployment is refused.","fix":"Set one of class, expression, delegateExpression or type on the service task."},"engine/script-format":{"title":"Script task without a script format","why":"The engine does not guess the language of a script, so a script task without scriptFormat cannot run.","fix":"Set the script format of the task, for example groovy or javascript."},"engine/feel-expression":{"title":"FEEL expression in a Flowable or Activiti diagram","why":"Flowable and Activiti evaluate JUEL expressions in \${...}; an expression that starts with = is FEEL, which they do not read.","fix":"Write the expression in JUEL, as \${...}."},"engineCheck":{"foreignExtension":"{subject} uses {names} from {owner}, which {engine} does not read, so what they set is lost at run time","unknownAttribute":"{subject} has the attribute {name}, which {engine} does not know","attributeNotAllowed":"{subject} has the attribute {name}, which the engine reads only on other kinds of element","unsupportedElement":"{subject} is an element that {engine} does not support","noImplementation":"{subject} has nothing to run: no class, expression, delegate expression or type","noScriptFormat":"{subject} has no script format, so the engine cannot tell which language the script is in","feelExpression":"{subject} uses a FEEL expression, which {engine} does not read; write it in JUEL as \${...}"},"connections/secret-undefined":{"title":"Secret that no file of the project defines","why":"A diagram that names a secret nothing in the project supplies runs with an empty value, and the task fails when the connector reads it. Secrets that only exist in a cloud console or a vault cannot be seen from here, so this is a warning.","fix":"Add the secret to connector-secrets.txt, .env, the Compose environment or the Helm values, or correct the name in the diagram."},"connections/secret-prefix":{"title":"Secret that is defined without the configured prefix","why":"When a secret prefix is configured, the connector runtime reads only the environment variables that start with it, so a variable of the right name without the prefix is ignored.","fix":"Rename the variable to the prefix followed by the secret name, or remove the prefix setting."},"connections/mcp-client-undefined":{"title":"MCP client that no configuration defines","why":"An MCP client connector looks its client id up in the runtime configuration; with no client of that id the task fails every time.","fix":"Add the client under camunda.connector.agenticai.mcp.client.clients, or correct the client id in the diagram."},"connections/property-renamed":{"title":"Property with its Camunda 8.7 name","why":"Camunda 8.8 renamed the properties of the Spring client to camunda.client.*. The old names still work for now, through a compatibility mapping that is removed in a later version.","fix":"Rename the property to the name given in the finding."},"connections/property-removed":{"title":"Property that Camunda 8.8 no longer reads","why":"Some 8.7 properties have no 8.8 counterpart: the plaintext switch is replaced by the scheme of the address, and the Operate and Tasklist clients are replaced by the Camunda client.","fix":"Remove the property, and write http:// or https:// in the address where the plaintext switch was."},"connections/secret-missing-in-env":{"title":"Secret defined in one environment and missing in another","why":"A secret the source environment supplies and the target does not is empty there, so a diagram that works in one fails in the other after the deployment.","fix":"Add the secret to the target environment before deploying."},"connections/key-missing-in-env":{"title":"Setting defined in one environment and missing in another","why":"A property or an MCP client that one environment configures and the other does not behaves differently there, often by silently using a default.","fix":"Add the setting to the target environment, or confirm that the default is what it needs."},"cmmn/duplicate-id":{"title":"Id used twice","why":"Every element of a case model is found by its id, so a second element with the same id makes every reference to it ambiguous and the engine refuses the model.","fix":"Give one of the elements a new id and update the references to it."},"cmmn/definition-ref-missing":{"title":"Plan item that points at no definition","why":"A plan item is only a place in the plan; what it does is its definition. Without a definitionRef that names a task, stage, milestone or event listener, the item does nothing and the engine refuses the model.","fix":"Set definitionRef on the plan item to the id of its definition, or delete the plan item."},"cmmn/dangling-sentry-ref":{"title":"Criterion that points at a sentry that is not there","why":"An entry or exit criterion names its sentry by sentryRef; if no sentry has that id, the criterion can never be satisfied, so the plan item never starts or never ends.","fix":"Point sentryRef at an existing sentry, or add the sentry."},"cmmn/dangling-on-part":{"title":"Sentry that waits for a plan item that is not there","why":"An on-part of a sentry waits for a standard event of the plan item named by sourceRef; with no such plan item the sentry never fires.","fix":"Point sourceRef at an existing plan item, or delete the on-part."},"cmmn/task-without-target":{"title":"Task that names nothing to run","why":"A process task, case task or decision task without the process, case or decision it calls starts nothing when it runs.","fix":"Set the process, case or decision the task calls."},"cmmn/no-case-plan-model":{"title":"Case without a case plan model","why":"The case plan model is the root of a case; without one there is nothing to run or to draw.","fix":"Add a casePlanModel to the case."},"cmmn/plan-truncated":{"title":"Plan that is shown only in part","why":"A stage that contains itself, directly or through other stages, would be drawn forever, and a case plan with more than 10000 plan items is not drawn whole. The viewer stops there and shows what it has.","fix":"Remove the plan item that puts a stage inside itself, or split the case into smaller cases."},"agents/no-model-call-limit":{"title":"AI agent without a limit on model calls","why":"An agent calls the model again after every round of tool calls. With no limit on the number of calls, a model that keeps asking for tools runs, and is paid for, until something else stops it.","fix":"Set the maximum number of model calls in the Limits group of the agent."},"agents/tool-without-description":{"title":"Tool of an AI agent without a description","why":"The model chooses a tool from its name and its description, and the description is the documentation of the element. A tool with none is guessed at or never used.","fix":"Write what the tool does and when to use it in the documentation of the element."},"agents/fromai-incomplete":{"title":"fromAi() parameter without a description or a type","why":"fromAi() is how a tool tells the model which parameters it takes. Without a description the model does not know what to put there, and without a type it sends text where a number or a list may be needed.","fix":"Give the call a description and a type: fromAi(toolCall.name, \\"What it is\\", \\"string\\")."},"agents/tool-filter-matches-nothing":{"title":"MCP tool filter that lets nothing through","why":"The included list of an MCP client is empty, or every name in it is also in the excluded list, which wins. The agent gets no tool from that client, though the client is there.","fix":"Remove the filter, or put at least one name in the included list that the excluded list does not name."},"agents/duplicate-tool-names":{"title":"Two tools of an agent with the same name","why":"The model calls a tool by its name, which is the id of the element, and an MCP client by its client id. Two tools whose names differ only by capitals, or two MCP clients with one client id, give it the same name twice and it cannot tell them apart.","fix":"Give one of them another id, or use one MCP client."},"agents/adhoc-without-agent":{"title":"Tool container that no agent uses","why":"An ad-hoc sub-process marked as the tool container of an agent, or holding MCP clients or tools written for one, does nothing when no AI agent task names it and it is not an agent itself.","fix":"Name the sub-process in the Tools element ID of the agent task, make it the agent, or take the agent marks out of it."},"agents/mcp-client-no-config":{"title":"MCP client of an agent that no configuration defines","why":"An MCP client element looks its client id up in the runtime configuration. With no client of that id in the project, the agent has a tool that fails every time it is called.","fix":"Add the client under camunda.connector.agenticai.mcp.client.clients, or correct the client id in the diagram."},"agents/plain-text-secret":{"title":"API key or secret written into the diagram","why":"A key typed into a field is saved in the file, in version control and in every copy of the diagram, and anyone who can read the diagram can use it.","fix":"Create a connector secret and write {{secrets.NAME}} in the field."},"agents/deprecated-template":{"title":"Agent on a deprecated 8.9 element template","why":"Camunda 8.10 replaces the 8.9 AI agent templates with version 2 of the task and the sub-process agent, and deprecates the old ones. They still run, but get no new options and are removed in a later version.","fix":"Run penstock migrate agents to rewrite the agent to the 8.10 template, or apply the new template in the Modeler."}},"element":{"kind":{"adHocSubProcess":{"one":"ad-hoc sub-process","other":"ad-hoc sub-processes"},"association":{"one":"association","other":"associations"},"boundaryEvent":{"one":"boundary event","other":"boundary events"},"businessRuleTask":{"one":"business rule task","other":"business rule tasks"},"callActivity":{"one":"call activity","other":"call activities"},"complexGateway":{"one":"complex gateway","other":"complex gateways"},"dataObject":{"one":"data object","other":"data objects"},"dataObjectReference":{"one":"data object reference","other":"data object references"},"dataStore":{"one":"data store","other":"data stores"},"dataStoreReference":{"one":"data store reference","other":"data store references"},"endEvent":{"one":"end event","other":"end events"},"eventBasedGateway":{"one":"event-based gateway","other":"event-based gateways"},"exclusiveGateway":{"one":"exclusive gateway","other":"exclusive gateways"},"group":{"one":"group","other":"groups"},"inclusiveGateway":{"one":"inclusive gateway","other":"inclusive gateways"},"intermediateCatchEvent":{"one":"intermediate catch event","other":"intermediate catch events"},"intermediateThrowEvent":{"one":"intermediate throw event","other":"intermediate throw events"},"lane":{"one":"lane","other":"lanes"},"manualTask":{"one":"manual task","other":"manual tasks"},"messageFlow":{"one":"message flow","other":"message flows"},"parallelGateway":{"one":"parallel gateway","other":"parallel gateways"},"participant":{"one":"participant","other":"participants"},"process":{"one":"process","other":"processes"},"receiveTask":{"one":"receive task","other":"receive tasks"},"scriptTask":{"one":"script task","other":"script tasks"},"sendTask":{"one":"send task","other":"send tasks"},"sequenceFlow":{"one":"sequence flow","other":"sequence flows"},"serviceTask":{"one":"service task","other":"service tasks"},"startEvent":{"one":"start event","other":"start events"},"subProcess":{"one":"sub-process","other":"sub-processes"},"task":{"one":"task","other":"tasks"},"textAnnotation":{"one":"text annotation","other":"text annotations"},"transaction":{"one":"transaction","other":"transactions"},"userTask":{"one":"user task","other":"user tasks"}}},"targets":{"onForm":"form {form}"},"preview":{"after":"After","before":"Before","fileAdded":"File added","fileDeleted":"File deleted"},"vscode":{"action":{"openAnEditor":"Penstock: open a Penstock editor to use {title}.","unavailableHere":"Penstock: {title} is not available for this diagram."},"codeLinks":{"diagramsUsing":"The diagrams that use {name}:{line}","forTitle":"Code for {title}","nothingUses":"No code in this project uses {title}","place":"{title} · line {line}","unreadable":"The code links could not read this project: {reason}","whereUsed":"Where it is used","didYouMean":"Did you mean '{name}'?","caseSensitive":"Names are case-sensitive, the diagrams use '{name}'","changeTo":"Change to '{name}'","unknown":{"process":"No diagram in the project has a process '{name}'","element":"No diagram in the project has an element '{name}'","message":"No diagram in the project has a message '{name}'","decision":"No decision in the project is '{name}'","error":"No error event in the project's diagrams catches '{name}'","variable":"No diagram in the project uses a variable '{name}'"},"workerVariable":{"notFetched":"The worker does not fetch '{name}', so it is null at runtime","notRead":"Nothing in the project's diagrams reads '{name}'","notSet":"Nothing in the project's diagrams sets '{name}'{only}","onlySet":", only '{name}' is set","setBefore":"{message} before this step"},"namedWorker":"The diagrams use the method name '{name}' as the job type, so renaming the method breaks them","nameJobType":"Name the job type '{name}'","unknownElement":{"noElement":"No element '{name}' in {owner}","caseSensitive":"the diagrams use '{name}', and names are case-sensitive"}},"config":{"created":"penstock.yaml created. The engine you picked is recorded in the project.","updated":"penstock.yaml updated. The engine you picked was added to the file; nothing else in it was touched."},"diff":{"aBranch":"a branch","aBranchDetail":"compare with another branch","anotherFile":"another file","anotherFileDetail":"compare with a diagram from anywhere on this machine","committedDetail":"the version that is committed","compareWith":"Compare {name} with","compareWithBranch":"Compare with the branch","compareWithTitle":"Compare with","gone":"That comparison is not open any more. Compare the diagram again.","openOneFirst":"Open a BPMN diagram to compare, or pick one in the explorer."},"document":{"changeRefused":"VS Code did not accept the change to {name}","editorNotBuilt":"The Penstock editor was not built. Run npm run build in the vscode folder."},"docs":{"notWebAddress":"The address {url} is not a web address, so it was not opened"},"file":{"noWorkspace":"There is no workspace folder to write into"},"git":{"noSuchRef":"{ref} has no {name}: {reason}","notInRepository":"{file} is not in a git repository, so there is no {ref} of it to compare with"},"hooks":{"noSuchRun":"No such hook run"},"licence":{"accountHeading":"Penstock {tier}: {detail}.","active":"Penstock {tier} is active on this machine. The CLI uses it too.","activeAgain":"Penstock {tier} is active on this machine again. The CLI uses it too.","activatedAgo":"since {when}","alreadyBought":"I already bought it","askEmail":"E-mail you bought Penstock with:","askPaidEmail":"E-mail you paid with:","buyPro":"Buy Pro","buyTeam":"Buy Team","buyTier":"Buy {tier}","checkoutExpired":"The checkout expired. Open a new one to buy Penstock.","checkoutFailed":"The payment did not go through, and nothing was charged.","checkoutOpened":"The checkout for Penstock {tier} is open in your browser; this finishes by itself once you have paid.","checkoutStopped":"Stopped waiting for the payment after an hour. If you paid, sign in with that address.","clipboard":"The licence key is on the clipboard. Keep it secret; in a pipeline, set it as PENSTOCK_LICENSE.","codeSent":"A sign-in code is on its way to {email}. Code from the e-mail:","copyKeyForCi":"Copy key for CI","entryPlaceholder":"you@example.com or PENSTOCK-PRO-...","entryPrompt":"E-mail or licence key. The address you bought Penstock with gets a code, and the licence sets itself up.","neither":"That is neither an e-mail address nor a Penstock licence key.","noLicence":"There is no Penstock licence bought with {email}.","noLicenceWithSignIn":"There is no Penstock licence bought with {email}. Buy one, or sign in with the address you bought it with.","notNow":"Not now","offerText":"{title} is part of Penstock {tier}. It {gives}.{ended} The licence reaches this machine by itself once you have paid.","onlyTeam":"Only a Penstock Team key works in a pipeline.","paid":"Paid, thank you. One last step and Penstock sets itself up.","releaseCleared":"There was no seat on this machine to release; the licence file was cleared.","releaseNone":"There is no licence on this machine to release, or the licence service could not be reached.","releaseThisMachine":"Release this machine","released":"The licence was released from this machine; it can be used on another.","seatsFull":"Your {tier} licence is in use on {count} machines, which is as many as it allows. Free one for this machine:","signIn":"Sign in","statusFree":"Penstock Free","statusTier":"Penstock {tier}","statusTrial":"Penstock Pro trial: {days}d","suggestText":"{title} is part of Penstock {tier}: it {gives}.","trialEnded":"Your {count}-day trial has ended.","trialEndedTooltip":"Pro trial ended on {date}. Penstock Free continues. Click for plans.","unreachable":"The licence service could not be reached: {reason}","widget":"Penstock Licence","feature":{"autoLayout":{"title":"Auto layout","gives":"turns a tangled diagram into a readable left-to-right flow"},"codeLinks":{"title":"Diagrams linked to the code","gives":"connects the diagrams with the code that runs them: the way from a step to its worker and back, usages, Code Vision, variables and error codes across both, renaming one side with the other, tests run from the diagram, and coverage on it"},"conventions":{"title":"Modelling conventions","gives":"names ids and fills in attributes the way penstock.yaml says, as you model"},"flowAnalysis":{"title":"Flow analysis","gives":"finds deadlocks, branches that run twice and steps that can never run, and shows the path that leads there"},"migration":{"title":"Camunda 7 to Camunda 8 conversion","gives":"converts a diagram for Camunda 8 with a visual preview before anything is written, marks what it could not convert on its element, and writes job workers from the code of your delegates"},"testRuns":{"title":"Process test runs","gives":"runs a process step by step against a local engine, with mocks, and shows what every step received and changed"},"aiChat":{"title":"AI chat","gives":"shows the changes an agent that speaks the Agent Client Protocol proposes to your diagrams on the canvas, for you to accept or reject"},"variableChecks":{"title":"Variable checks","gives":"finds the fields and names a step reads that the code that sets them lacks"},"apiTemplates":{"title":"Templates from an API description","gives":"writes a REST connector element template for every operation of an OpenAPI, Swagger or Postman file, with typed inputs, authentication from its security schemes and error handling"},"connectionsEnvironments":{"title":"Environment comparison for connections","gives":"lists the secrets, MCP clients and settings that one environment lacks compared with another, so you see what the one you deploy to is missing before you deploy"},"incidentScenario":{"title":"Reproduce an incident as a scenario","gives":"turns an incident into a scenario that starts the process with its start values, drives the path it took and ends on the same incident, runs it, and checks a proposed fix against it"},"agentTools":{"title":"Agent scenarios and migration","gives":"writes the scenario of an AI agent process with the model stubbed, and rewrites the agent elements of old Camunda templates to the current agent templates"},"aiReceipt":{"title":"Verification receipt for AI changes","gives":"writes a receipt of what an AI agent's change did to your files (what was added, removed or changed, the new problems it brought, the scenarios that ran), hands new problems back to the agent to fix, keeps the receipt as a file, and fails a pipeline when an agent's change has none"},"dmnTests":{"title":"DMN test table","gives":"runs saved test cases on a decision table, shows which rules each case matched and which rules no case covers, and fails a pipeline when rule coverage falls below a minimum"},"migrationProof":{"title":"Migration proof on both engines","gives":"runs your scenarios on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and shows for every scenario whether the converted process behaves the same or where it first differs"},"policyPack":{"title":"Policy pack in git","gives":"writes your team’s rules, severities, conventions, palette, element templates and baselines into a folder in git, pins it by hash, locks those settings in the editor, and fails a pipeline when the pack was changed, a rule was weakened or a required check did not run"},"promotion":{"title":"Environment promotion and drift","gives":"shows which resources of an environment differ from your files, plans and takes exactly what was verified on one environment to the next, names the secrets the target lacks, and refuses a protected environment without a typed confirmation or, in a pipeline, an approval record"},"auditEvidence":{"title":"Audit evidence pack","gives":"writes one reviewable package for a release: the diagrams as pictures, the check, scenario and DMN test results, the changes since the last tag, the policy and AI receipts, every file with its SHA-256 and a seal that shows tampering, and verifies a package again later"},"heatmap":{"title":"Heat map and bottlenecks from engine data","gives":"shows the elements of a diagram coloured by how often, how long and how badly they ran on the engine over a period you choose (visits, average and 95th percentile duration, incidents and failure rate) and lists the slowest and most failing elements, each a click from its place on the diagram"},"replay":{"title":"Replay and what-if from this token","gives":"shows the real history of one process instance on the diagram step by step with the variables at each step, and starts a new instance at a chosen element with those variables edited, only on an engine marked for tests or on this machine"},"incidentLoop":{"title":"Incident to fix loop","gives":"runs an incident through its whole loop with every step shown: the reproducing scenario, the proposed fix, a check of the fix with that scenario, redeploying only the changed file and retrying the failed job, as a dry run first and with a confirmation before anything changes on the engine"},"refactorBulk":{"title":"Bulk renames and Extract to Call Activity","gives":"renames many names at once from a mapping file, each with the same preview and the same refusals as a single rename, and moves a subprocess, or a fragment with one way in and one way out, into its own process replaced by a call activity wired through variable mappings; a single rename with its preview stays free, with no time limit"}},"educationWho":"Free Pro for students, teachers and open-source maintainers","educationLine":"{who}: apply at {url}","applyFreePro":"Apply for Free Pro","educationApply":"{who}: apply"},"testRuns":{"cancel":"Cancel","case":"test case {number}","confirmText":"Penstock will deploy a test build to {url}, start instances and answer the jobs it mocks. The build and its instances are removed after each run. Mark the profile with deployment.forTests: true to stop being asked.","confirmTitle":"Run test cases on this engine?","controller":"Penstock scenarios","failed":"The test case failed. See the trace.","mocked":" (mocked)","noCases":"there is no test-case file; penstock test-cases --generate writes one next to the diagram","noneYet":"No run of Penstock test cases has been made in this window yet.","notConfirmed":"Not run: the engine was not confirmed for tests","output":"Penstock Test Runs","pickTitle":"Open the run on the diagram","run":"Run","skipped":"The test case was skipped.","started":"Penstock test cases, {when}","step":"{id}: {state}{mocked}","suite":"{diagram}: {name}","trace":"The trace of this run is at {trace}","traceNotKept":"Penstock could not keep the trace of a run: {reason}","unknownDiagram":"Penstock does not know which diagram that run belongs to","waiting":"waiting for a {kind} at {id}"},"unavailable":{"clipboardPicture":"Putting a picture on the clipboard","converting":"Converting a Camunda 7 diagram","diagramTests":"Running the tests a diagram is linked to","editorPalette":"The IDE palette","linkedRename":"Renaming what a diagram links to","notYet":"{what} is not available in VS Code yet.","projectPageToolWindow":"The tool window the project page sends"},"migration":{"convertQuestion":"Convert {name} to Camunda 8 into {folder}? The original file stays as it is."},"deploy":{"deploymentSection":"the deployment section","tokenAnswered":"The token endpoint answered {status}","tokenAnsweredWith":"The token endpoint answered {status} ({code})","noPassword":"No password for {user} on {where}: enter it under Connection","noClientSecret":"No client secret on {where}: enter it under Connection","noEngineAddress":"No engine address for {where}: set deployment.url"},"host":{"malformed":"The request is malformed","noSuchOperation":"The host has no such operation","notAvailable":"{operation} is not available in this host","unreadable":"{file} could not be read: {reason}","notValidJson":"it is not valid JSON","notValidYaml":"it is not valid YAML ({code}, line {line})"},"tree":{"empty":"No diagrams in this project","unreadable":"The project tree could not read this project: {reason}","open":"Open","reload":"Reload from disk","openConfig":"Open penstock.yaml","moreActions":"More actions…","actionsFor":"Actions for {name}","noFolder":"Open a folder to see its Penstock diagrams, decisions and forms.","openFolder":"Open Folder","cli":{"group":"Run Penstock","runTitle":"Penstock: {command}","diffPrompt":"Commit, branch or tag to compare with:","untrusted":"Running Penstock requires trusting this project first","exportTitle":"Export pictures","exportFolder":"Folder","exportFormat":"Format","exportComment":"SVG needs nothing. PNG needs puppeteer installed in the project.","command":{"check":"Check","scenarios":"Scenarios","junit":"JUnit Tests","code":"Code","docs":"Docs","format":"Format","change":"Diff Since…","export":"Export…","doctor":"Doctor","evidence":"Evidence Pack…"}}},"mcp":{"nodeMissing":"Penstock's MCP server needs Node.js with npm on the PATH. Install Node.js, then reload the window."},"trust":{"accept":"Trust project"},"rename":{"kind":{"bean":"bean name","class":"Java class","decision":"decision id","error":"error code","form":"form id","jobType":"job type","message":"message name","process":"process id","signal":"signal name","topic":"external task topic"},"offerMessage":"The {kind} '{name}' is still used in {summary}. Rename it to '{newName}' there too?","nothingElse":"Nothing else names '{name}'","notRenamable":"This value is not a name a diagram and its code share","action":"Rename","edit":"Rename {kind} '{name}' to '{newName}'","empty":"The new {kind} cannot be empty","scenarioMessage":"Rename its scenario file, {from}, to {to} too?","scenarioFailed":"{from} could not be renamed to {to}, so it still has the old name.","files":{"one":"{count} file","other":"{count} files"},"summary":"{files}, {diagrams} in diagrams and forms, {code} in code"},"whatsNew":{"title":"Penstock updated to {version}","action":"What's new"},"about":{"title":"About","version":"Version","development":"development","documentation":"Documentation","licenses":"Open source licenses","trusted":"Trusted projects","trustedNone":"No project is trusted through Penstock yet.","trustedRemove":"Remove","trustedFailed":"Penstock could not take {path} off its list of trusted projects: {reason}"},"chats":{"title":"Chats","rename":"Rename chat","delete":"Delete chat","renamePrompt":"Chat title","deleteConfirm":"Delete the chat \\"{title}\\"?","deleteDetail":"Its messages are removed from this project.","deleteAction":"Delete","connecting":"starting the agent","empty":"No chats yet. Ask the agent from the input at the foot of an editor, or start one here.","untrusted":"Trust this workspace to let an agent work in it.","outside":"{path} is outside the project.","openFirst":"Open a diagram, decision or form to continue this chat."}},"script":{"cannotBeRenamed":"A Penstock script tab cannot be renamed","context":{"summary":"Context: {names}","title":"Variables at this step","showAll":"Show all"},"writers":{"none":"No place in the process sets it","set":"Set by {places}"},"typeLabel":"Type: {type}","completion":{"variable":"Process variable","builtin":"FEEL built-in function"},"noSuchScript":"There is no script at that place in the diagram.","conflict":{"message":"The diagram changed {name} while you were editing it","keepTab":"Keep my text","useDiagram":"Use the diagram's text"},"run":{"button":"Run","title":"Values for the expression","help":"Each variable takes a JSON value or a FEEL expression. A variable left empty is not set.","kindLabel":"Kind","kind":{"json":"JSON","expression":"FEEL"},"unavailable":"Only a FEEL expression runs here. Groovy and JavaScript scripts run in the engine, as part of the process."}},"themeChoice":{"title":"Editor theme","ide":"Follow the IDE","light":"Light","dark":"Dark","dracula":"Dracula"},"processDebug":{"problem":{"unreadable":"The diagram could not be read, so no debug copy was made.","noProcess":"The diagram has no executable process to debug.","unknownProcess":"The process {process} is not in this diagram.","unreachable":"The engine could not be reached.","notDeployed":"The engine did not report the debug copy {process} after deploying it.","incident":"The engine reported an incident.","timedOut":"The engine did not answer within {seconds} seconds.","unreachableAfter":"The engine did not answer after {attempts} tries: {reason}"},"message":{"stopped":"Debugging stopped.","finished":"The process instance finished.","incident":"The instance has an incident: {reason}","endedElsewhere":"The instance ended outside the debugger."},"cleanup":{"searchFailed":"Could not look for debug instances: {reason}","cancelFailed":"Instance {instance} is still running: {reason}","deleteFailed":"The debug copy {deployment} is still deployed: {reason}"},"breakpointDot":"Breakpoint at {element}. Click to remove it.","confirm":{"title":"Debug on this engine?","text":"Penstock will deploy a copy of the process as {copy} on {url}, start an instance of it, and remove the copy when you stop. The copy runs the real tasks of your process, so workers and delegates on this engine will do real work.","accept":"Debug"},"invalidValue":"The value of {name} should be valid JSON","variables":"Variables","variablesHint":"Change a value to set it before the process goes on. Values are JSON, so text needs quotes.","noVariables":"This step has no variables yet.","variableName":"Name","variableValue":"Value of {name}","variableValueHint":"JSON value","addVariable":"Add variable","breakpoints":"Breakpoints","noBreakpoints":"No breakpoints. Select a step and toggle one to stop there.","removeBreakpoint":"Remove the breakpoint at {element}","remove":"Remove","toggleOnSelection":"Toggle breakpoint on selection","cleanupPending":"Removing the debug copy…","cleanupDone":"The debug copy {copy} was removed from the engine.","cleanupFailed":"The debug copy could not be removed","leftOnTheEngine":"Left on the engine: {deployment}. Penstock tries again the next time this tab opens.","tryAgain":"Try again","checkingTheEngine":"Looking for an engine to debug on.","noEngine":"No engine to debug on.","noEngineHint":"Connect an engine on this machine, or one marked deployment.forTests, to debug a copy of this process.","state":{"idle":"Not running","deploying":"Deploying the copy","running":"Running","paused":"Paused","finished":"Finished","failed":"Failed","stopped":"Stopped"},"starting":"Starting…","start":"Start debugging","startAndStep":"Start and step","continue":"Continue","step":"Step","stop":"Stop","copyNote":"Debugging runs a copy of this process. The original is never touched: the copy is deployed as {copy} and removed when the session ends.","copyIdFallback":"<process id>__debug","emptyTitle":"Debug this process on your engine","emptyHint":"Toggle breakpoints on steps, then start. The process stops before each breakpoint, and you can read and change its variables, continue, or step to the next element.","pausedAtBreakpoint":"Paused at a breakpoint","pausedAtStep":"Paused by a step","deploying":"Deploying the copy and starting an instance of it.","waiting":"Waiting for something outside the debugger: a worker, a timer, a message or a user task.","runningNote":"Running. Steps passed so far: {count}.","process":"Process","startVariables":"Start variables (JSON)","startVariablesHint":"An object, for example {\\"amount\\": 5}. Leave {} to start with none."},"web":{"pageTitle":"Penstock","unknownFailure":"Unknown failure","serverTimeout":"The server did not answer in time.","fileNotFound":"The file was not found.","noDocumentOpen":"No file is open.","deletedOnDisk":"{name} was deleted on disk. Your changes are kept here.","changedOnDisk":"{name} changed on disk while it has unsaved changes.","reloadedFromDisk":"{name} was reloaded from disk.","reloadFailed":"Unable to reload {name}: {reason}","saveFailed":"Unable to save {name}: {reason}","tree":{"project":"Project","newFile":"New file","empty":"No diagrams, decisions or forms in this project.","emptyHint":"Create a file to start, or start Penstock in the project folder.","unsaved":"Unsaved changes","more":"Project actions","refresh":"Refresh","copyFailed":"Unable to copy to the clipboard."},"tabs":{"label":"Open files","close":"Close {name}","unsaved":"{name} has unsaved changes","all":"All open files","menu":"Actions for {name}"},"pane":{"opening":"Opening {name}...","failed":"Unable to open {name}.","loadingEditor":"Loading the editor...","editorFailed":"Unable to load the editor.","editorFailedHint":"Check the connection to the server and try again."},"banner":{"deleted":"{name} was deleted on disk. Save to write it again.","changed":"{name} changed on disk. Your unsaved changes are still here.","saveFailed":"Unable to save: {reason}","reload":"Reload from disk","keep":"Keep my version","closeTab":"Close tab","compare":"Compare"},"connection":{"lost":"The connection to the server is lost. Your unsaved changes stay in this page; save again when the connection returns."},"empty":{"title":"No file is open.","hint":"Choose a diagram, decision or form in the project tree, or create a new one."},"newFile":{"title":"New file","type":"Type","kind":{"bpmn":"BPMN diagram","dmn":"DMN decision","form":"Form"},"content":"Content","empty":"Empty","example":"Example","name":"Name","nameHint":"The extension {extension} is added when it is missing.","folder":"Folder","folderHint":"Relative to the project folder. Leave it empty for the project folder.","create":"Create","nameEmpty":"Enter a name for the file.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > |","folderOutside":"The folder should stay inside the project.","exists":"A file with this name already exists in this folder.","failed":"Unable to create the file: {reason}"},"unsaved":{"title":"Close {name}?","text":"{name} has changes that are not saved.","discard":"Discard changes"},"text":{"label":"Contents of {name}"},"command":{"actions":"Find action","closeAll":"Close all tabs","closeSplit":"Close split view","closeTab":"Close tab","jumpToTab":"Jump to tab","newFile":"New file","nextTab":"Next tab","previousTab":"Previous tab","quickOpen":"Open file","reconnect":"Reconnect to the server","save":"Save","saveAll":"Save all","settings":"Settings","shortcuts":"Keyboard shortcuts","splitView":"Split view","resetLayout":"Reset the panel layout","toggleSidebar":"Show or hide the sidebar","askAgent":"Ask the agent","agents":"AI agents","connections":"Open the connections map","aiAgents":"Show the AI agents of the project","migration":"Migration workspace","policy":"Policy","drift":"Environments and drift"},"conflict":{"diff":"Differences between your version and the file on disk","help":"Keeping your version writes it over the file the next time you save.","keepMine":"Keep my version","legendMine":"Your version","legendTheirs":"On disk","same":"Your version and the file on disk have the same lines.","summary":"Lines only in your version: {mine}. Lines only on disk: {theirs}.","takeTheirs":"Load from disk","title":"{name} changed on disk","tooDifferent":"The two versions differ too much to compare line by line."},"drafts":{"discard":"Discard","found":{"one":"Found unsaved changes from your last session in {count} file.","other":"Found unsaved changes from your last session in {count} files."},"label":"Unsaved changes from the last session","restore":"Restore unsaved changes"},"expired":{"hint":"Your unsaved changes are kept in this browser and come back when you open the project again.","retry":"Try again","text":"The link this page was opened with no longer works. Penstock was probably restarted. Use the link that penstock web printed in the terminal.","title":"This page has lost its link to Penstock"},"main":{"label":"Editor"},"menu":{"close":"Close","closeAll":"Close all","closeOthers":"Close others","closeRight":"Close to the right","copied":"Copied.","copyFailed":"Unable to copy to the clipboard.","copyPath":"Copy path","copyRelative":"Copy relative path","reveal":"Reveal in project tree","splitRight":"Split right","splitDown":"Split down"},"quick":{"commandsLabel":"Commands","files":"Files","hint":"Type to filter. Use the arrow keys to choose and Enter to open. Type > for commands.","label":"Open file","noCommands":"No commands match.","noFiles":"This project has no diagrams, decisions or forms yet.","noMatch":"No files match \\"{query}\\".","openFile":"{path}, open","opened":"open","placeholder":"Search files by name, or type > for commands","recent":"Recently opened","results":"Files","sidePlaceholder":"Choose a file to open beside this one"},"settings":{"appearance":"Appearance","autosave":"Save changes automatically","autosaveDelay":"Delay (seconds)","autosaveHelp":"A file is written after this many seconds without edits. A file that changed on disk is never overwritten.","autosaveRange":"The delay should be a whole number of seconds between {min} and {max}.","saving":"Saving","themeSystem":"Follow the system","title":"Settings","agents":"AI agents","agentsHelp":"Turn the AI chat on or off, choose how conversations open and set up the agents.","agentsManage":"Manage AI agents…","suggestNextBlock":"Suggest the next element","suggestNextBlockHelp":"Shows the element that most likely comes next beside a dead end. Tab adds it, Escape dismisses it.","suggestions":"Suggest names, sources and expressions","suggestionsHelp":"Shows the name, source or expression most likely for a field of the properties panel as faint text after the caret. Tab adds it, Escape dismisses it, Alt+Shift+E explains it.","editor":"Editor"},"shortcuts":{"editorHint":"Press ? inside an editor for its own shortcuts.","group":{"files":"Files","tabs":"Tabs","window":"Window"},"open":"Keyboard shortcuts","title":"Keyboard shortcuts"},"skip":"Skip to the editor","split":{"closePane":"Close the pane of {name}","resize":"Resize the split view"},"state":{"conflict":"Changed on disk","deleted":"Deleted on disk","failed":"Unable to save","saved":"All changes saved","saving":"Saving...","unsaved":"Unsaved changes","unsavedAuto":"Unsaved changes, autosave after {seconds} s without edits"},"status":{"connected":"Connected","encoding":"Encoding and line endings","engine":"Engine","expired":"Link expired","label":"Status","licence":"Licence","offline":"Offline"},"title":{"document":"{name} - {project} - Penstock","project":"{project} - Penstock"},"welcome":{"title":"Open a project","text":"Choose the folder that holds your diagrams, decisions and forms. Nothing leaves this machine.","open":"Open a project...","recent":"Recent projects","noRecent":"No projects opened yet.","recentFailed":"Unable to load the recent projects.","missing":"{folder} is no longer there.","notFound":"Folder not found","forget":"Remove {name} from the list","hint":"You can also start Penstock with a folder: penstock web <folder>."},"folders":{"title":"Open a project","open":"Open project","willOpen":"Opens {folder}","places":"Places","home":"Home","computer":"Computer","recent":"Recent","path":"Folder","location":"Location","list":"Folders","showHidden":"Show hidden folders","showHiddenCount":"Show hidden folders ({count})","hereConfig":"Project here: this folder has a penstock.yaml","hereDiagrams":"Project here: {count} diagrams, decisions or forms in this folder","noFolders":"No folders here.","truncated":"Showing the first {shown} of {total} folders. Type a path to go further.","link":"{name} is a link to another folder","linkTag":"link","projectTag":"project"},"project":{"switcher":"Projects","recent":"Recent projects","openAnother":"Open another project...","close":"Close project","gone":"The folder of {name} is no longer there. Your unsaved changes stay in this page.","downloadZip":"Download project as .zip","unsavedOpenTitle":"Open another project?","unsavedCloseTitle":"Close the project?","unsavedText":"{count} open files have changes that are not saved. The tabs of this project are closed when the project changes.","saveAll":"Save all","saveAllFailed":"Unable to save every file. Nothing was closed.","awayTitle":"The project changed in another tab","awayText":"This page still shows the previous project. Reload it to continue with the project that is open now."},"entry":{"newFolder":"New folder","newFolderTitle":"New folder","createFolder":"Create folder","name":"Name","inside":"Created inside {folder}.","insideProject":"Created in the project folder.","nameEmpty":"Enter a name.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > | or control characters.","nameEnds":"The name should not start with a space or end with a space or a dot.","rename":"Rename","renameLabel":"New name","duplicate":"Duplicate","moveAction":"Move to...","moveTitle":"Move {name}","moveTo":"Move to","move":"Move","moveFailed":"Unable to move {name}: {reason}","projectFolder":"(project folder)","noFolders":"There is no other folder to move this to.","delete":"Delete","deleteFile":"Delete file","deleteFolder":"Delete folder","deleteFileTitle":"Delete {name}?","deleteFolderTitle":"Delete folder {name}?","deleteFileText":"{name} is removed from the disk. This cannot be undone.","deleteFolderText":"The folder {name} and the {count} files in it are removed from the disk. This cannot be undone.","deleteUnsaved":"{count} of them are open with unsaved changes, and those changes are lost.","copyPath":"Copy path","copyRelative":"Copy relative path","copied":"Path copied.","download":"Download","downloadActive":"Download the open file","renameTitle":"Rename {name}"},"upload":{"title":"Add files to the project","text":"Choose where the files are saved in the project. They are copied there; the originals stay where they are.","button":"Upload file...","drop":"Drop BPMN, DMN or form files to add them to the project","extension":"The name should end with .bpmn, .dmn or .form.","ignored":"Only .bpmn, .dmn and .form files can be added. Other files were skipped.","addOne":"Add file","addMany":"Add {count} files","fileN":"File {number}"},"titleBar":{"label":"Window title"},"dock":{"resize":"Resize the panels"},"code":{"noServer":"Highlighting only. Install {server} to get completion, hover and go to definition here.","uses":{"title":"Used in diagrams","open":"Open {name} in {diagram}","item":"{type} in {diagram}","more":"and {count} more","kind":{"JOB_TYPE":"Job type","TOPIC":"Topic","CLASS":"Class","BEAN":"Bean","MESSAGE":"Message"}},"names":{"code":"in code","diagram":"in a diagram","both":"in code and diagrams"}},"toolPanel":{"label":"Penstock project model","toolbar":"Penstock actions","filter":"Filter the model","refresh":"Refresh","open":"Open","menu":"Penstock node actions","loading":"Reading the project model...","error":"Unable to read the project model.","empty":"Nothing to show yet.","emptyHint":"Open a folder with BPMN, DMN or form files, or start from an example.","noMatch":"Nothing matches the filter.","locked":"Links to code are part of Pro.","unlock":"Unlock","truncated":"The tree shows the first {count} nodes. Narrow it with the filter.","refreshFailed":"Unable to refresh the model: {reason}","stale":"The model changed while you chose. Choose the action again.","unsupported":"The browser editor cannot do this yet.","copied":"Copied to the clipboard."},"sidebar":{"label":"Sidebar","actions":"Actions","check":"Check","scenarios":"Scenarios","monitor":"Monitor","debug":"Debug","layout":"Auto layout","unavailable":"Not available for the open file.","resize":"Resize the sidebar","resizeChats":"Resize the chat list","toggle":"Show or hide the sidebar","countScenarios":"{passed} of {all} scenarios passed","countProblems":{"one":"{count} problem","other":"{count} problems"},"countWaiting":{"one":"{count} waiting","other":"{count} waiting"}},"script":{"noDiagram":"The diagram of this script is not open in the editor."}},"webHost":{"testsNeedTheIde":"Running the tests of a worker needs the IDE. Run them from your build tool.","source":{"readOnly":"Read-only","truncated":"The file is large, so only the first part is shown.","label":"Source of {name}"},"compare":{"failed":"The two versions could not be compared","failedHint":"One of them is not a diagram Penstock can read.","against":"Compared with {version}","summary":"{added} added, {removed} removed, {changed} changed, {moved} moved","identical":"No differences","action":"Compare with the last commit","notTracked":"This file is not in a git repository yet, so there is nothing to compare it with.","head":"the last commit","tab":"{name} (changes)"},"places":{"open":"Open","hint":"Several places match. Pick the one to open.","none":"{name} is not written in any source file of this project."},"rename":{"title":"Rename in linked files","intro":"{from} is now {to}. The old name is still written in:","apply":"Rename","offer":"{from} is still written elsewhere. {summary}","review":"Review","done":"Renamed {from} to {to}. Places: {places}, files: {files}.","failed":"Nothing was renamed: {reason}","where":{"diagram":"Diagram","form":"Form","code":"Code"}},"migration":{"title":"Convert {name} for Camunda {target}","convert":"Convert","folder":"Folder","folderHint":"The converted files go here, inside the project.","folderOutside":"The folder should be inside the project","replace":"Existing files","replaceHint":"Already there: {files}","replaceBox":"Replace the files that are already there","changes":"What changes","noChanges":"Nothing in the file itself changes.","open":"What stays open","nothingOpen":"Nothing stays open.","byHand":"By hand","summary":"Changes: {changes}, left open: {open}, by hand: {manual}"},"licence":{"title":"Penstock licence","plan":"Plan: {tier}. {detail}","loading":"Reading the licence…","trial":"Pro trial, {days} days left.","needed":"This needs Penstock Pro. Enter a key or buy one.","key":"Licence key","keyHint":"The key from your purchase. It is kept on this machine, never in the page.","keyEmpty":"Enter the licence key first","email":"E-mail","emailHint":"Filled in on the payment page when you buy.","activate":"Activate","buyPro":"Buy Pro","buyTeam":"Buy Team","release":"Release this machine","activated":"Penstock {tier} is active on this machine.","released":"The licence was released from this machine.","checkoutOpened":"The payment page is open in a new tab. The key arrives by e-mail once you have paid.","tier":{"free":"Free","pro":"Pro","team":"Team"}},"clipboard":{"copyTitle":"Copy by hand","copyText":"The browser did not let the page copy. Copy the text below yourself.","copy":"Copy","pasteTitle":"Paste by hand","pasteText":"The browser did not let the page read the clipboard. Paste the text below."}},"desktop":{"name":"Penstock","about":{"description":"BPMN, DMN and form editor for Camunda"},"menu":{"file":"File","newFile":"New file","newWindow":"New window","openProject":"Open project...","openRecent":"Open recent","noRecent":"No recent projects","clearRecent":"Clear recent projects","closeProject":"Close project","save":"Save","closeTab":"Close tab","undo":"Undo","redo":"Redo","cut":"Cut","copy":"Copy","paste":"Paste","selectAll":"Select all elements","closeWindow":"Close window","revealMac":"Reveal in Finder","revealWindows":"Show in Explorer","revealLinux":"Show in file manager","edit":"Edit","view":"View","toggleTree":"Toggle project tree","toggleSidebar":"Toggle sidebar","zoomIn":"Zoom in","zoomOut":"Zoom out","zoomReset":"Actual size","window":"Window","help":"Help","shortcuts":"Keyboard shortcuts","website":"Penstock website","about":"About {name}"},"shell":{"starting":"Opening {project}...","welcome":{"title":"Open a project","hint":"Choose a folder with BPMN diagrams, DMN decisions and forms.","open":"Open project...","recent":"Recent projects","noRecent":"Projects you open appear here."},"failed":{"title":"Unable to start the editor","hint":"The editor engine did not start for {project}."},"stopped":{"title":"The editor engine stopped","hint":"Your unsaved changes are still in the window. Restart the engine to continue."},"crashed":{"title":"The editor window stopped","hint":"Reload the window to continue."},"restart":"Restart","reload":"Reload","another":"Open another project...","details":"Details"},"dialog":{"openProject":{"title":"Open project","button":"Open"},"unsaved":{"title":"Close without saving?","text":"This window has unsaved changes. They will be lost if you close it.","discard":"Discard changes","cancel":"Cancel"},"quit":{"title":"Quit without saving?","text":"Some windows have unsaved changes. They will be lost if you quit."}}},"agent":{"notFound":"The agent command was not found or could not be started.","unsafe":"The agent was not started: a Windows command file cannot be given these arguments safely.","exited":"The agent stopped unexpectedly.","installFailed":"The agent service could not be installed. Check your network or npm registry and try again.","npmMissing":"Penstock needs Node.js with npm to start the agent service.","unpublished":"npm has no Penstock command line for this version, so the agent service could not start.","serviceExited":"The agent service stopped before it was ready.","serviceNotStarted":"The agent service could not be started.","exitCode":"exit code {code}","authRequired":"The agent requires authentication. Log in or configure credentials first.","failed":"The agent reported an error: {detail}","timeout":"The agent did not answer in time.","write":"Write {path}","allow":"Allow","reject":"Reject","writeRejected":"Writing {path} was not allowed.","newChat":"New chat","modeName":"Mode","stepOf":"step {step} of {total}","waitingForYou":"waiting for you","retiring":"The agent is finishing in an older window; try again in a moment.","updateNeeded":"The agent server is newer than this window. Update the plugin or the extension, then try again.","hubLost":"The agent server stopped. Try again in a moment.","serverGone":"The agent stopped because its agent server closed during the turn.","stopped":"The turn was stopped.","unanswered":"Nobody answered the question, so the turn was stopped.","quiet":"The agent said nothing while no window was open, so the turn was stopped.","killed":"The agent did not stop in time, so it was restarted and this turn was stopped.","newSession":"The agent does not keep this chat's earlier messages, so it continues in a new session.","contextFile":"The message is about the file {file}.","contextElements":"Selected elements: {elements}.","contextLinks":"When you mention an element of a Penstock diagram, write it as a markdown link, [Name](penstock:<file>#<id>), with the file path relative to the project and the element's id, for example [Charge card](penstock:docs/order-process.bpmn#charge_card). A file is [name](penstock:<file>). Never put the id or the path in the visible text. Before you name a variable, a job type or a mapping, call the tool element_context of the penstock server for the element: it lists the variables that reach it and the names the project already uses, so reuse one of them instead of inventing a new one.","reason":{"unknownAgent":"There is no agent called {agent}.","noSuchChat":"There is no such chat.","noSuchQueued":"That message is no longer queued.","noSuchOption":"The agent does not offer that setting.","badOptionValue":"The agent does not offer that choice for this setting.","optionRefused":"The agent did not accept the change: {reason}","noSignIn":"The agent offers no sign-in to start from here.","signInRefused":"The agent did not sign in: {reason}","off":"The AI chat is turned off in the settings.","staleQuestion":"The agent is not waiting for that question any more.","badOption":"{option} is not one of the answers the agent offered.","badText":"The message should not be empty or longer than {limit} characters.","badTitle":"The title should not be empty or longer than {limit} characters.","queueFull":"No more than {limit} messages should wait in the queue.","notRunning":"The agent is not running.","noSuchFile":"There is no such file.","fileTooLarge":"The file should be smaller than {limit} MB.","isAFolder":"That is a folder, not a file.","noClient":"The client should be named."},"log":{"skipped":"Penstock skipped the chat file {file}: {reason}","notKept":"Penstock could not keep the chat {id}: {reason}"}},"patch":{"eventNotAllowed":"a {type} cannot have a {event} event definition","sameElement":"a sequence flow cannot start and end at \\"{id}\\"","startEventTarget":"nothing can lead into the start event \\"{id}\\"","boundaryTarget":"nothing can lead into the boundary event \\"{id}\\"","differentScopes":"\\"{from}\\" and \\"{to}\\" are not in the same process or sub-process","eventBasedTarget":"an event-based gateway can only lead to a catch event or a receive task, not \\"{to}\\"","duplicateFlow":"there is already a sequence flow from \\"{from}\\" to \\"{to}\\"","notAFlowNode":"\\"{id}\\" is a {type}, which a sequence flow cannot start or end at","cannotRemoveContainer":"\\"{id}\\" is a {type}; remove it in the editor","isAFlow":"\\"{id}\\" is a sequence flow; move the elements it joins","dependsOnFailed":"needs operation {number}, which cannot be applied","noDrawing":"the diagram has no drawing to place elements in"},"ghost":{"chip":{"add":"Add","connect":"Connect","remove":"Delete","rename":"Rename","move":"Move","condition":"Condition","reference":"Reference","worker":"Worker","change":"Change"},"item":{"add":"Add {type} “{name}”","connect":"Connect “{from}” to “{to}”","remove":"Delete {type} “{name}”","move":"Move {type} “{name}”","rename":"Rename {type} “{name}” to “{value}”","condition":"Set the condition of {type} “{name}” to {value}","setOne":"Set {key} of {type} “{name}” to {value}","setMany":"Change {keys} of {type} “{name}”"},"check":{"passed":"Checks passed"},"status":{"ok":"Passed","warning":"Warning","error":"Error","blocked":"Cannot be applied"},"checking":"Checking the proposed changes…","proposed":"{count} proposed changes to review","position":"{label}: {position} of {count}","accepted":"Accepted: {label}. {left} left to review.","rejected":"Rejected: {label}. {left} left to review.","allRejected":"Rejected {count} changes.","allAccepted":"Accepted {count} changes as one step. {left} left to review.","cannotAccept":"Cannot accept “{label}”: {reason}","alreadyRejected":"a change it needs was rejected","nothingToAccept":"There is nothing left that can be accepted.","noLongerApplies":"“{label}” no longer applies to the diagram: {reason}","reviewed":"Review finished: {accepted} accepted, {rejected} rejected.","commentSent":"Comment sent about “{label}”","region":"Review of proposed changes","title":"Proposed changes","summary":"{pending} of {total} to review","attention":"{count} need attention","queued":"{count} more proposals waiting","acceptAll":"Accept all","rejectAll":"Reject all","accept":"Accept","reject":"Reject","next":"Next change (J)","previous":"Previous change (K)","showAll":"Show all changes","hideAll":"Hide the list","comment":"Comment for the agent","sendComment":"Send comment","close":"Close the review","decided":{"accepted":"Accepted","rejected":"Rejected"},"patchFindings":"Not tied to one change","empty":"No proposed changes.","emptyHint":"When an agent proposes changes, they appear on the canvas as ghosts for you to accept or reject.","checkpoint":{"heading":"What undo does not cover","kept":"A checkpoint of the diagram is kept before each accepted step.","limit":{"comments":"Comments you sent to the agent stay sent; undo does not recall them.","otherFiles":"Only this diagram is covered: forms, decision tables and code the agent changed are not.","deployed":"A deployment made after accepting is not withdrawn.","memory":"The checkpoint lives in memory and is gone when the editor is closed or reloaded."}},"collapse":"Collapse the review","expand":"Expand the review","undone":"Back for review: {label}","acceptChange":"Accept change","rejectChange":"Reject change","wholeHint":"The agent writes the whole file, so the change is accepted or rejected as one.","wholeAccepted":"Change accepted.","wholeRejected":"Change rejected."},"suggestions":{"status":{"offered":"Suggested {value}. Tab adds it, Escape dismisses it, Alt+Shift+E explains it.","added":"Added {value}.","dismissed":"Suggestion dismissed."},"explain":{"title":"Why this suggestion","likelihood":"Likelihood {percent}%","keys":"Tab adds it, Escape dismisses it"},"unit":{"ratio":"ratio","percent":"percent","basisPoint":"basis point","second":"second","millisecond":"millisecond","minute":"minute","hour":"hour","byte":"byte","kilobyte":"kilobyte","megabyte":"megabyte","gigabyte":"gigabyte","dollar":"dollar","cent":"cent"},"origin":{"fact":"A fact of the code","pool":"Found in the project","composed":"Composed from the names of the diagram","transform":"An expression, checked on the sample values"},"reason":{"other":"A signal from the diagram and the project","kindConvert":"Converts {from} to {to}, a factor of {factor}.","kindWholeMinorUnits":"Rounds the result to whole {to}.","kindIsoDuration":"Writes the duration as an ISO-8601 length.","kindDurationText":"Writes the duration as its ISO-8601 text.","kindNumberFromText":"Reads the text as a number.","kindTextFromValue":"Writes the value as text.","kindDurationFromText":"Reads the text as a duration.","constantInDiagram":"The diagram already uses {text}.","constantInProject":"Another diagram of the project uses {text}.","weightedOverlap":"shares its words with the name","headEqual":"the same head word","tailEqual":"the same last word","jaroWinkler":"spelled alike","trigramCosine":"letters in common","lengthRatio":"a similar length","casingAgrees":"the same casing","ownerStripped":"an element prefix removed","typeKnown":"a known type","originContract":"written by the worker's code","originScript":"written by the script","originDecision":"an output of a called decision","originDownstream":"read by a later element","originScope":"in scope here","originTaskType":"written for the same task type elsewhere","labelAssociation":"its words go with the label's"}},"nextBlock":{"chip":"Next: {type} · Tab to add","status":{"suggested":"Suggested next: {type}. Press Tab to add it, Escape to dismiss.","added":"Added {type}.","dismissed":"Suggestion dismissed."}},"aiBlocks":{"selectElement":"Select {type} {name} on the canvas","openScenario":"Open scenario {name} in the Scenarios tab","diffSummary":"{added} added, {removed} deleted, {changed} changed"},"timeline":{"title":"Timeline","region":"Timeline of a run","play":"Play","previousStep":"Previous step","nextStep":"Next step","toStart":"To the start","toEnd":"To the end","speed":"Playback speed {speed}","channel":"Colour bars by","channelStatus":"Status","channelDuration":"Duration","channelCoverage":"Coverage","source":"Show the run of","sourceInstance":"Instance","sourceScenario":"Scenario run","refresh":"Refresh","close":"Close the timeline","zoomIn":"Zoom in","zoomOut":"Zoom out","fit":"Fit to width","resize":"Resize the timeline","playhead":"Playhead","step":"Step {step} of {total}","stepAt":"Step {step} of {total}: {name}","beforeStart":"Before the first step","lane":"{name}, visits: {count}","bar":"{name}, visit {visit}, {state}, {duration}","merged":"{count} short steps","folded":"{span} folded","stateCompleted":"Completed","stateActive":"Active","stateFailed":"Failed","stateTerminated":"Terminated","emptyTitle":"No run to show.","emptyHint":"Pick an instance in Monitor, or run a scenario, and its steps appear here.","loadingTitle":"Reading the run…","loadingHint":"Asking the engine for the steps of this instance.","noStepsTitle":"This run has no steps yet.","noStepsHint":"The engine has not recorded a step for it. Refresh in a moment.","problem":"Unable to read the run: {reason}","detailStarted":"Started","detailEnded":"Ended","detailDuration":"Duration","detailInstance":"Activity instance","detailVisit":"Visit","detailIncident":"Incident","detailChanged":"Changed variables","detailMocked":"Answered by the scenario","detailNone":"Select a bar to see its step.","coverageSummary":"{covered} of {total} elements reached","unvisited":"Not reached","runLabel":"Run {id}","keysHint":"Left and Right step, Shift with them walks the visits of a row, Shift with Up and Down changes the row, Space plays, Home and End jump, Enter selects the element, plus, minus and zero zoom"},"codeBridge":{"ambiguousDetail":"More than one place in the code answers to {name}.","badgeAmbiguous":"{element}: {count} places in the code match {name}","badgeBound":"{element}: code found in {where}","badgeMissing":"{element}: no code found for {name}","cardLabel":"Code of {element}","createStub":"Create worker stub","groupTitle":"Code","kindBean":"Bean","kindClass":"Class","kindDecision":"Decision","kindJobType":"Job type","kindMessage":"Message","kindProcess":"Process","kindTopic":"Topic","missingDetail":"Nothing in the project's code is named {name}.","missingNear":"The closest name in the code is {near}.","moreCount":"and {count} more","notReached":"No test run has reached it","openCode":"Open code","openDecision":"Open decision","openPlace":"Open {where}","openProcess":"Open process","paused":"The debugger is paused here","reached":"Reached by a test run","snippetLoading":"Reading the code…","snippetUnavailable":"The first lines are not available here.","stateAmbiguous":"Several places match","stateBound":"Code found","stateMissing":"No code found","tests":"Tests: {count}"},"assistant":{"showDetails":"Show details","card":{"close":"Close","connecting":"Starting the agent...","expand":"Open the chat in the sidebar","fold":"Fold the chat","label":"Latest turn of the chat","loading":"Loading the conversation...","unfold":"Unfold the chat","suggest":"Expand the chat","suggestLong":"The conversation is getting long.","suggestDocument":"The answer contains a file.","newChat":"New chat"},"change":{"changed":"{name}: {what}","created":"New file {name}","file":"{name} changes","flow":"Flow {from} → {to}","lines":"{name}: +{added} -{removed} lines","moved":"{name} moves"},"chats":{"empty":"No chats yet. Start one with +.","label":"Chats","menu":"Chat actions","new":"New chat","title":"Chats","agents":"AI agents"},"delete":{"accept":"Delete chat","action":"Delete","text":"\\"{title}\\" and its messages will be removed from this project.","title":"Delete chat"},"ended":{"text":"The agent ended without an answer.","title":"The agent has ended"},"form":{"title":"Agent settings","agent":"Agent","agentNew":"Changing the agent starts a new chat.","manage":"Manage agents…","back":"Back"},"input":{"noAgent":"No agent","add":"Attach a file or mention an element","ask":"Ask the agent","settingsLabel":"{agent}: {settings}","optionNextTurn":"Applies from the next message.","context":"Context of the message","keyEnter":"Enter","keyShiftEnter":"Shift Enter","keyNewline":"newline","keyQueue":"queue","keySend":"send","label":"Message to the agent","more":"+{count} more","placeholder":"Ask about this or give the agent a task","queued":"Queued messages","queuedText":"Queued: {text}","removeChip":"Remove {name} from the message","send":"Send","stop":"Stop","unqueue":"Take the message back","stateWorking":"Agent working…","stateWaiting":"Waiting for you","showCard":"Show the conversation"},"mention":{"elements":"Elements","files":"Files","label":"Attach to the message","none":"Nothing matches.","search":"Search elements and files"},"noAgent":{"choose":"Choose another agent","settings":"Agent settings","text":"No agent is installed on this machine. Install one with:","title":"No agent found"},"question":{"allow":"Allow","allowAlways":"Always allow","clean":"Check is clean","deny":"Deny","denyAlways":"Always deny","details":"Show the changes in full","label":"The agent asks for permission","showOnCanvas":"Show on canvas","undo":"Undo takes it back","apply":{"one":"Apply {count} change to {file}?","other":"Apply {count} changes to {file}?"},"files":{"one":"{count} file","other":"{count} files"},"problems":{"one":"{count} problem to look at","other":"{count} problems to look at"}},"rename":"Rename","signIn":"Sign in","signedOut":{"text":"Sign in to the agent in its own app, then try again.","title":"{agent} is not signed in"},"state":{"connecting":"starting","failed":"stopped with an error","idle":"idle","waiting":"waiting for you","working":"working"},"switch":{"label":"Switch chat","list":"Chats of this project"},"tryAgain":"Try again","unreachable":"Unable to reach the agent service","changeLabel":"Changes to {name}","diffTooLarge":"The change is too large to show here.","hideXml":"Hide XML","showXml":"Show XML","noVisibleChange":"Nothing changes in the drawing; only the text of the file does.","reviewOnCanvas":"The change is also shown on the canvas of {name} while that diagram is open.","thinking":"Thinking","newChat":"New chat","openFile":"Open {path}","openAtLine":"Open {path} at line {line}","truncated":"The rest of this message is not shown.","tool":{"pending":"Waiting","running":"Running","done":"Done","failed":"Failed","stopped":"Stopped","penstock":{"listDiagrams":"List diagrams","showDiagram":"Show diagram","editDiagram":"Edit diagram","checkDiagram":"Check diagram","analyzeFlow":"Analyze flow","listScenarios":"List scenarios","checkCodeLinks":"Check code links"}},"loose":{"element":"Not shown as ghosts (element type not supported): {ids}","attach":"Not shown as ghosts (not connected to an element that already exists): {ids}","scope":"Not shown as ghosts (inside another container than the element before it): {ids}","type":"Not shown as ghosts (the element type changes): {ids}","reconnect":"Not shown as ghosts (a flow is reconnected): {ids}","resize":"Not shown as ghosts (an element is resized): {ids}","property":"Not shown as ghosts (a property that cannot be set or cleared this way): {ids}","event":"Not shown as ghosts (the event definition changes): {ids}"},"sentence":{"listing":"Listing the diagrams","listed":{"one":"Listed {count} diagram","other":"Listed {count} diagrams"},"listedPlain":"Listed the diagrams","reading":"Reading {file}","read":"Read {file}","checking":"Checking {file}","checked":{"one":"Checked {file} - {count} problem","other":"Checked {file} - {count} problems"},"checkedClean":"Checked {file} - no problems","checkedPlain":"Checked {file}","analysing":"Analysing the flow of {file}","analysed":{"one":"Analysed the flow - {count} problem","other":"Analysed the flow - {count} problems"},"analysedDeadEnds":{"one":"Analysed the flow - {count} dead end","other":"Analysed the flow - {count} dead ends"},"analysedClean":"Analysed the flow - no problems","analysedPlain":"Analysed the flow of {file}","scenariosListing":"Listing the scenarios of {file}","scenariosListed":{"one":"Listed {count} scenario","other":"Listed {count} scenarios"},"scenariosRan":{"one":"Ran {count} scenario - {passed} passed","other":"Ran {count} scenarios - {passed} passed"},"scenariosPlain":"Listed the scenarios of {file}","codeChecking":"Checking the code links","codeChecked":{"one":"Checked the code links - {count} problem","other":"Checked the code links - {count} problems"},"codeClean":"Checked the code links - no problems","codePlain":"Checked the code links","editing":"Editing {file}","edited":"Edited {file}","previewing":"Previewing an edit of {file}","previewed":"Previewed an edit of {file}","unfinished":"{step} - unable to finish","more":"+{count}"},"work":{"steps":{"one":"{count} step","other":"{count} steps"},"label":"What the agent did"},"view":{"label":"View of the change","picture":"Picture","source":"Source","openDiff":"Open diff","diffTitle":"Changes to {name}","sourceLabel":"Source of the change","folded":{"one":"{count} unchanged line","other":"{count} unchanged lines"},"showSource":"Show source","applied":{"one":"Changed {count} element","other":"Changed {count} elements"},"appliedFile":"Changed {file}"},"picker":{"list":"Agents","missing":"Not installed","manage":"Manage agents…","newChat":"Choosing another agent starts a new chat."},"chip":{"noElement":"No element called {id} in {file}","noFile":"No file called {file} in this project"},"tab":{"emptyChat":"This chat has no messages yet.","emptyChatHint":"Write below to ask the agent about this editor's file.","label":"Chat","transcript":"Conversation","empty":"Ask the agent about this project.","emptyHint":"Changes it wants to make are shown here for your approval.","unreadable":"Unable to load this chat.","unreadableHint":"The agent may have been stopped. Try again in a moment."},"working":"Working..."},"agents":{"title":"AI agents","customDescription":"Your own command: {command}","general":"General","aiChat":"AI chat","search":"Search agents","list":"Agents","on":"On","all":"All agents","allShown":"Every agent is on.","noneOn":"No agent is on. Install one and turn it on.","noMatch":"No agent matches the search.","loading":"Loading the agents…","failed":{"title":"The agents are not available","hint":"Penstock could not read the list of agents. Check that the editor is connected and try again."},"state":{"installing":"Installing…","installingPercent":"Installing {percent}%","reading":"Reading models…","failed":"Unable to install","update":"Update available","on":"On","installed":"Installed"},"version":"Version {version}","license":"License","website":"Website","repository":"Source code","status":"Status","via":{"path":"Found on your PATH","download":"Installed by Penstock","package":"Prepared by Penstock","custom":"Your own command"},"how":{"binary":"Not installed. Penstock downloads it for this computer and checks the download against the checksum of the registry.","npx":"Not installed. It runs through npx, which fetches it the first time you use it.","uvx":"Not installed. It runs through uvx, which fetches it the first time you use it.","custom":"Your own command"},"cannotInstall":"Not installed. Penstock cannot install it on this computer.","install":"Install","tryAgain":"Try again","update":"Update","turnOn":"Turn on","turnOff":"Turn off","uninstall":"Uninstall","byHand":"To install it yourself, run","models":"Models and options","modelsRefresh":"Refresh models","modelsReading":"Asking the agent…","modelsEmpty":"No models read yet.","modelsEmptyHint":"Refresh models starts the agent, asks which models it offers and closes it again. The agent has to be signed in.","modelsOwn":"The agent’s own choice ({value})","modelsRead":"Read {time}","signInHint":"Sign in with the agent’s own tool, for example by running it once in a terminal, then refresh again.","updating":"Updating the list…","neverUpdated":"The list has not been updated yet.","updatedSnapshot":"The list that came with Penstock, {time}","updated":"List updated {time}","refresh":"Refresh the list","blocked":{"node":"Needs Node.js, which is not on this computer.","nodeLink":"Get Node.js","uv":"Needs uv, which is not on this computer.","uvLink":"Get uv","platform":"There is no download for this computer.","checksum":"The registry gives no checksum for this download, so Penstock does not install it. Install it yourself and Penstock finds it on the PATH."},"reason":{"tooLarge":"The answer was larger than it should be.","timeout":"The server did not answer in time.","offline":"Unable to reach the server.","http":"The server answered with an error:","badList":"The answer was not a list of agents.","notKept":"Penstock could not keep the list on this computer:","archiveTooLarge":"The download unpacks to more than it should.","badArchive":"The download is not a valid archive.","unsafeArchive":"The download has a file outside its folder, so Penstock stopped:","noTar":"Penstock needs the tar program to unpack this download, and it is not available:","cancelled":"Cancelled.","noNode":"Node.js is not on this computer.","npmFailed":"npm was unable to fetch the package:","checksum":"The download does not match the checksum of the registry, so Penstock threw it away.","noProgram":"The download does not contain the program:","notInstallable":"Penstock does not install this agent.","busy":"An install is still running.","notInstalled":"Install the agent before turning it on.","noOptions":"The agent did not offer any models or options.","noHostPage":"This host has no page for the AI agents.","installFailed":"Unable to install the agent:","unknown":"Something went wrong."},"aiChatOff":"Off","aiChatBottom":"At the bottom of the editor","aiChatSidebar":"In the sidebar","aiChatOffHelp":"No input, no chats and no agent process: the agent is not started.","aiChatBottomHelp":"The input sits at the foot of the editor, with the conversation card above it.","aiChatSidebarHelp":"The conversation lives in the Chat tab of the sidebar, and no input sits at the foot.","scope":{"tools":"tool","resources":"resource","prompts":"prompt"},"finding":{"noModelCallLimit":"{agent} has no limit on model calls, so a loop that never settles keeps calling the model.","toolWithoutDescription":"Tool {tool} of {agent} has no description for the model.","fromaiIncomplete":{"description":"fromAi({parameter}) in {tool} has no description.","type":"fromAi({parameter}) in {tool} has no type.","both":"fromAi({parameter}) in {tool} has neither a description nor a type."},"filter":{"empty":"The filter of {client} lets no {scope} through: its included list is empty.","allExcluded":"The filter of {client} lets no {scope} through: every included name is also excluded."},"duplicateTool":"Tool {name} of {agent} has the same name as {other}, apart from capitals.","duplicateClient":"{agent} uses the MCP client {name} twice ({other} and this element), so the model gets its tools twice.","adhocWithoutAgent":"{name} looks like the tool container of an agent, but no AI agent uses it.","mcpClientNoConfig":"MCP client {client} of {agent} is defined in no configuration of the project.","plainTextSecret":"{field} of {agent} holds a value written into the diagram; use a secret instead.","deprecatedTemplate":"{agent} uses version {version} of the Camunda 8.9 agent template, which 8.10 deprecates; use {replacement}."},"migrate":{"refusal":{"tooOld":"Version {version} of the template is older than version {min}, where the migration starts. Update the element to the latest 8.9 version of the template in the Modeler first.","tooNew":"Version {version} of the template is newer than version {max}, the newest one the migration rules cover.","noVersion":"The element carries no template version.","duplicateInput":"An input of the element is mapped twice.","dynamicValue":"{property} holds an expression, so Penstock cannot tell which settings of the 8.10 template apply.","unmappedValue":"{path} is {value}, which the migration rules of the template do not map.","unmappedExpression":"{path} is an expression, which the migration rules of the template cannot map.","mustChoose":"{target} has to be chosen in the 8.10 template and has no default.","unknownInput":"{target} has no place in the 8.10 template, and no migration rule moves it.","inactiveInput":"{target} is set, but the 8.10 template does not show it for the settings the agent has after the migration.","badChoice":"{target} is {value}, which the 8.10 template does not offer.","noZeebe":"The file does not declare the Zeebe namespace.","noElement":"The element could not be found in the file as a single element with its own extension elements.","noInputs":"The input mapping of the element could not be found in the file.","noTaskDefinition":"The task definition of the element could not be found in the file.","wrongType":"The element is a {type}, not the element type of the template.","unreadable":"The rewritten file could not be read back.","readBack":"The rewritten element does not read back as planned.","otherChanged":"Another element of the file would have changed.","unknownCondition":"The migration rules of the 8.10 template use a condition that Penstock does not know: {what}.","noTarget":"A migration rule of the 8.10 template names no target.","noAction":"A migration rule for {target} neither moves nor sets a value.","noMigration":"The 8.10 template names no migration from this one."}},"scenario":{"stubAnswer":"Stubbed model answer from Penstock.","noteTaskStub":"The model is stubbed: the agent job is completed with a canned answer and no tool call, so the scenario checks the path around the agent, not the model. A tool call needs a job worker that answers differently on each run, which one mock cannot do.","noteSubprocessRunner":"This agent is an ad-hoc sub-process. The scenario uses COMPLETE_JOB_AD_HOC_SUB_PROCESS, which Camunda Process Test runs and the Penstock runner does not, so it is written to be run by Camunda Process Test.","unreadable":"The diagram could not be read.","noAgents":"The diagram has no AI agent element.","noSuchAgent":"The diagram has no AI agent with the id {id}.","noJobType":"The agent has no fixed job type to stub (template {template}), so no scenario was made for it.","name":"Agent {agent} answers without a tool call","description":"Made by Penstock for the agent {agent}, with the model answer stubbed."}},"scriptTab":{"title":"{name} - {what}","nameWithId":"{name} ({id})","script":"script","condition":"condition","executionListener":"{event} listener","taskListener":"{event} task listener","input":"input {name}","output":"output {name}"},"feel":{"debug":{"action":"Debug expression","breakpoint":{"otherFile":"Breakpoints can only be set in the expression that is being debugged","pastEnd":"This line is after the end of the expression"},"error":"Error: {message}","group":{"after":"Variables after the script","current":"Current","evaluated":"Evaluated","iteration":"Iteration variables","variables":"Variables"},"request":{"unsupported":"This debugger does not support {command} yet"},"stack":{"name":"Expression"},"title":"FEEL debug: {name}","truncated":"The trace stopped after {count} steps, so the rest of the expression is not stepped through","type":{"name":"FEEL expression debug"},"unsupported":"The debugger does not follow this construct yet (at character {at})","launch":{"invalid":"The debug configuration needs an expression, its sample values and its source"},"notStarted":"The expression is not being debugged"},"problem":{"doubleEquals":"FEEL compares with =, not ==","spacedName":"A name with spaces needs backticks","unclosedBracket":"This bracket is never closed","missingElse":"An if needs an else","endsTooEarly":"The expression ends too early","unexpectedToken":"This is not expected here","unterminatedString":"This string is never closed","notFeel":"This is not a FEEL expression"},"fix":{"replace":"Replace with {text}"},"run":{"lens":"Run expression","channel":"Penstock FEEL","input":"{name} = {value}","result":"Result from {source}: {value}","warning":"{text} gives a warning: {type}","engineWarning":"Warning: {message}","rejected":"Not run: {message}","failed":"The engine failed: {problem}","noEngine":"No Camunda 8 engine is connected, so the expression ran in the editor (preview).","inline":"→ {value}","error":"The expression could not be run: {message}","inlineFailed":"✕ {message}","sample":{"prompt":"Sample value for {name}","rejected":"The value of {name} is not valid FEEL: {problem}","warned":"The value of {name} reads a name that has no value","invalidJson":"The value of {name} is neither JSON nor a FEEL expression"}},"source":{"preview":"preview","engine":"engine"}},"clientFacts":{"sentence":{"notFound":"Python, Go, C# and Scala workers are not read because the Penstock CLI was not found.","incompatible":"Python, Go, C# and Scala workers are not read because the Penstock CLI is too old for this editor.","untrusted":"Python, Go, C# and Scala workers are not read until this project is trusted.","failed":"Python, Go, C# and Scala workers are not read because the Penstock CLI failed.","timedOut":"Python, Go, C# and Scala workers are not read because the Penstock CLI took too long to answer.","tooLarge":"Python, Go, C# and Scala workers are not read because the project has too many of their files."},"hint":{"install":"Install the Penstock CLI with npm install -g @kern0x1b/penstock-cli, or set its path in the Penstock settings.","trust":"Trust the project to use its own CLI.","check":"Check the Penstock CLI in the terminal with penstock facts, then open the diagram again.","fewerFiles":"Keep the code of these languages in fewer files, or leave them out of the project."}},"connections":{"kind":{"secret":"secret","mcpClient":"MCP client","property":"property"},"finding":{"secretUndefined":"Secret {name} is not defined in any file of the project","secretUndefinedIn":"Secret {name} is not defined for {environment}","secretUndefinedHint":"The project also reads secrets from {providers}, whose names Penstock cannot see.","secretPrefix":"Secret {name} is defined without the prefix {prefix}, so the runtime ignores it","mcpClientUndefined":"No MCP client {name} is configured","mcpClientUndefinedIn":"No MCP client {name} is configured for {environment}","propertyRenamed":"{name} is called {replacement} in Camunda 8.8","propertyRemoved":"{name} is not read by Camunda 8.8","secretMissing":"Secret {name} is defined for {against} and missing for {environment}","keyMissing":"{name} is set for {against} and missing for {environment}"},"screen":{"title":"Connections","help":"The secrets and MCP clients your diagrams and templates refer to, and where each one is defined. Only names are shown, never values.","environment":"Environment","allFiles":"All files","compareWith":"Compare with","compareNone":"Nothing","summary":"{defined} defined, {missing} not defined","referenced":"Referenced by your diagrams","column":{"name":"Name","kind":"Kind","status":"Status","usedIn":"Used in","definedIn":"Defined in","missingIn":"Missing in","names":"Names"},"status":{"defined":"Defined","undefined":"Not defined","unverifiable":"Cannot be checked here"},"unverifiableHint":"No file in this project supplies these, so they may live in a cloud console, a vault or the cluster.","unused":"Defined and not used","sources":"Where names are defined","opaque":"Values read from outside the project","opaqueItem":"{place} reads {from}, whose names cannot be seen","open":"Open","copyName":"Copy name","copied":"Name copied","unknownEnvironment":"No file names the environment {environment}.","pro":{"title":"Compare environments","text":"See which secrets and keys one environment lacks compared with another, before you deploy. Included in Pro.","unlock":"Unlock with Pro"},"reconcile":{"title":"{environment} compared with {against}","missing":"Missing in {environment}","onlyIn":"Only in {environment}","none":"{environment} has everything {against} has.","used":"used by a diagram"},"empty":{"title":"Nothing to map yet","hint":"Refer to a secret in a connector as secrets.NAME or set an MCP client id, then keep the values in a connector-secrets file, .env, docker-compose.yml or Helm values."},"loading":"Reading the project","failed":{"title":"The connections could not be read","hint":"Open a project folder and try again."}}},"cmmn":{"notCmmn":"This is not a CMMN case model: the file has no definitions element of the CMMN 1.1 model namespace.","kind":{"casePlanModel":"Case plan model","stage":"Stage","humanTask":"Human task","processTask":"Process task","caseTask":"Case task","decisionTask":"Decision task","task":"Task","milestone":"Milestone","eventListener":"Event listener","timerListener":"Timer event listener","userListener":"User event listener","unknown":"Plan item without a definition"},"dialect":{"camunda":"Camunda 7","flowable":"Flowable","plain":"Plain CMMN 1.1"},"finding":{"duplicateId":"The id {id} is used by more than one element.","definitionRefMissing":"The plan item {id} has no definitionRef, so it does nothing.","definitionRefUnknown":"The plan item {id} points at {target}, and nothing has that id.","danglingSentryRef":"The criterion {id} points at the sentry {target}, and there is no such sentry.","sentryRefMissing":"The criterion {id} has no sentryRef, so it can never be satisfied.","danglingOnPart":"The on-part {id} waits for the plan item {target}, and there is no such plan item.","onPartSourceMissing":"The on-part {id} has no sourceRef, so it waits for nothing.","taskWithoutTarget":"The {kind} {id} does not say what it calls.","noCasePlanModel":"The case {id} has no case plan model.","noCase":"The file has no case.","planLimit":"The case plan has more than {limit} plan items, so the rest is not shown.","planCycle":"The plan item {id} is a stage that contains {target}, which it is already inside, so it is shown without its contents."},"prop":{"case":"Case","cases":"Cases in the file","id":"Id","planItems":"Plan items","sentries":"Sentries","dialect":"Flavour","kind":"Kind","name":"Name","definition":"Definition","rule":{"required":"Required","repetition":"Repeats","manualActivation":"Starts manually"},"always":"always","entryCriterion":"Entry criterion","exitCriterion":"Exit criterion","documentation":"Documentation","on":"Belongs to","sentry":"Sentry","missingSentry":"sentry {id} (not in the file)","noSentry":"no sentry","onPart":"{item}: {event}","ifPart":"if {condition}"},"canvas":{"label":"Case model diagram. Drag to move, use the buttons or plus and minus to zoom, zero to fit.","zoom":"Zoom","zoomIn":"Zoom in","zoomOut":"Zoom out","fit":"Fit"},"props":{"none":"Nothing to show","noneHint":"The file could not be read as a case model.","readOnly":"Read only. Penstock does not edit case models.","select":"Select an element in the diagram to see its properties."},"problems":{"clean":"No dangling references, repeated ids or tasks without a target."},"viewer":{"readOnly":"Penstock shows case models but cannot edit them. To change this file, open it as text.","openAsText":"Open as text","unreadable":"This file cannot be shown as a case model","empty":"This case model has nothing to draw","emptyHint":"The file has no case plan model. The Problems tab says what is missing."}},"incident":{"read":{"answered":"The engine answered {status} when the incident was read.","notJson":"The engine answered with something that is not JSON.","noInstance":"The incident {key} does not say which instance it belongs to.","noSuchInstance":"The engine has no incident or instance {key}.","noIncident":"The instance {key} has no open incident."},"note":{"elementGone":"The diagram no longer has the element {element}, so the incident cannot be reproduced on it.","pathElementsGone":"These elements of the path are not in the diagram any more and were left out: {elements}.","redacted":"Values that looked secret were replaced by a placeholder in these variables: {names}.","currentVariables":"The engine keeps no history of the start values, so the variables are those the instance has now.","taskVariables":"The values submitted in the user tasks are not kept by the engine, so each task is completed with none. Add them if the incident depends on them.","correlationKey":"A message could not get its correlation key from the variables, so it is sent without one.","calledProcess":"{element} calls another process, which a scenario cannot stand in for, so it may not run.","otherIncidents":"The instance has more incidents. The scenario reproduces only the one you picked.","mustHappenByItself":"{element} is not a job, so the scenario cannot make it fail; the incident has to arise by itself from the start values."},"scenarioName":"Reproduce incident at {element} ({type})","noType":"unknown type","scenarioDescription":"Made from the incident of instance {instance}. Secret-looking values are replaced by placeholders.","fixName":"Fix check: {name}","prompt":{"intro":"An incident stopped a process instance at the element {element} of {file}. Its type is {type}.","message":"The engine's message:\\n{message}","detail":"Its trace, redacted:\\n{detail}","variables":"The instance's variables, with secret-looking values replaced by placeholders:\\n{variables}","scenario":"This Penstock scenario reproduces the incident:\\n{scenario}","notes":"What the scenario could not take from the engine:\\n{notes}","task":"Propose a change to the diagram that removes this incident. Change only what the incident needs. Penstock will run the scenario again on your proposal and show whether the incident is gone."},"step":{"start":"Start {process} with {names}","startEmpty":"Start {process} with no variables","mock":"Complete the jobs of type {type}","task":"Complete the user task {element}","message":"Send the message {name}","signal":"Broadcast the signal {name}","timer":"Fire the timer {element} at once","fail":"Fail the job at {element} with no retries left","expect":"Expect an incident of type {type} at {element}","expectAny":"Expect an incident at {element}"},"node":{"noEngine":"The project has no engine to read the incident from. Set deployment.url in penstock.yaml.","noDiagram":"No diagram in the project defines the process {process}.","noRunEngine":"The project has no engine to run the scenario on."},"reproduce":"Reproduce as scenario","reproduceHint":"Build a scenario that raises this incident again","dialog":{"title":"Reproduce incident","intro":"The scenario starts the process with the variables of this instance, with anything that looks secret replaced by a placeholder, follows the path it took and ends on the same incident. Previewing is free, with no time limit.","reading":"Reading the incident from the engine…","steps":"Scenario steps","notes":"What could not be taken from the engine","save":"Save scenario","saveAndRun":"Save and run","run":"Run scenario","proposeFix":"Propose a fix","noChat":"Turn on the AI chat to ask the agent for a fix.","saved":"Saved to {file}.","alreadySaved":"{file} already has this scenario.","sent":"Sent to the agent with the scenario, the redacted incident and the diagram. A proposed change shows on the canvas with the scenario result next to it.","chatFailed":"The message could not be sent to the agent.","noDiagram":"The diagram could not be read.","noEngine":"No engine marked for tests is set up for this project."},"fix":{"running":"Running the scenario on the proposed diagram for {element}…","passes":"Scenario now passes: the incident at {element} no longer happens.","fails":"Scenario still fails: the incident at {element} still happens.","failsWhy":"Scenario still fails at {element}: {reason}","unavailable":"The scenario could not be run on the proposed diagram: {reason}","needsClick":"This fix adds executable content: {what}. Penstock does not run it by itself.","check":"Check this fix","notTestEngine":"Not run by itself: the engine is not marked for tests (deployment.forTests: true) and is not a local engine you confirmed for tests.","executable":{"script":"a script on {element}","listener":"a listener on {element}","service":"a service call on {element}","connector":"a connector on {element}","expression":"an expression that calls out on {element}","unknownElement":"an element that could not be read","other":"a change to executable content on {element}"}}},"aiAgents":{"field":{"provider":"Provider and model","backend":"Backend","template":"Template","systemPrompt":"System prompt","userPrompt":"User prompt","maxModelCalls":"Model calls at most","storage":"Storage","contextWindow":"Context window","responseFormat":"Response format","parseJson":"Parse as JSON","schema":"Response schema","humanApproval":"Human approval"},"filter":{"dynamic":"set by an expression","included":"Allowed: {names}","excluded":"Blocked: {names}"},"findings":{"none":"Nothing found.","count":{"one":"{count} problem","other":"{count} problems"}},"kind":{"task":"AI agent task","subprocess":"AI agent sub-process"},"mcp":{"none":"No MCP clients.","defined":"configuration found","undefined":"configuration missing","unverifiable":"not checked","remote":"remote, {transport}"},"migrate":{"accept":"Migrate","button":"Migrate to the 8.10 template","cancelled":"Nothing was changed.","confirmText":"{migrated} element(s) will be rewritten, {untouched} left untouched. Save the diagram afterwards to keep the change.","confirmTitle":"Migrate this agent?","done":"Migrated {migrated} element(s), left {untouched} untouched. Save the diagram to keep the change.","failed":"The migration failed: {reason}","hint":"Rewrites this agent on the 8.10 template in the open diagram. The result is checked by reading it back; anything it cannot prove stays as it is. Save the diagram to keep it.","nothing":"Nothing to migrate: this agent is already on the 8.10 template.","untouched":"Left untouched: {reason}"},"orphans":"Tool containers no agent uses","param":{"name":"Parameter","type":"Type","description":"Description for the model","noType":"no type","noDescription":"no description","schema":"schema given"},"prompt":{"empty":"empty"},"scenario":{"button":"Make scenario","hint":"Adds a scenario with the model stubbed to the diagram’s scenarios (Penstock Pro).","written":"Scenario added to {file}.","exists":"The scenario is already in {file}.","failed":"No scenario: {reason}"},"screen":{"title":"AI agents","help":"Every AI agent task and sub-process of the project, with the tools the model can call and the MCP clients it uses. Select an agent to open it in its diagram.","loading":"Reading the project","open":"Open in the diagram","failed":{"title":"The AI agents could not be read","hint":"Open a project folder and try again."},"empty":{"title":"No AI agents yet","hint":"Add an AI agent task or sub-process from the Camunda 8.10 templates to a diagram of the project."},"column":{"agent":"Agent","kind":"Kind","model":"Model","tools":"Tools","mcp":"MCP clients","problems":"Problems"},"agentCount":{"one":"{count} AI agent","other":"{count} AI agents"},"problemCount":{"one":"{count} problem","other":"{count} problems"}},"section":{"model":"Model","prompts":"Prompts","tools":"Tools","limits":"Limits","memory":"Memory","guardrails":"Guardrails","mcp":"MCP clients","findings":"Problems"},"select":"Select on the canvas","severity":{"error":"error","warning":"warning"},"standalone":"MCP clients no agent uses","tab":{"emptyTitle":"No AI agent in this diagram","emptyHint":"Add an AI agent task or sub-process from the Camunda 8.10 templates. Select the agent, its tool container or one of its tools to see what the model sees.","listHint":"Select an agent on the canvas, or here, to see its prompts, tools and limits."},"template":{"deprecated":"deprecated template","migrate":"This element uses a template version that Camunda 8.10 deprecates. Move it to the new template with penstock migrate agents."},"tool":{"noDescription":"No description: the model sees only the name","noParameters":"The model fills in no parameters"},"tools":{"none":"No tools in the tool container.","noContainer":"The agent names no tool container.","containerMissing":"The tool container {id} is not in the diagram.","dynamicContainer":"The tool container is set by an expression.","count":{"one":"{count} tool","other":"{count} tools"}},"value":{"notSet":"not set","yes":"yes","no":"no","none":"none","nothing":"nothing"}},"receipt":{"title":"Verification receipt","verdict":{"verified":"Verified","findings":"Has new findings","notVerified":"Not verified"},"reason":{"newErrors":"The change introduced new errors.","newWarnings":"The change introduced new warnings.","scenarioFailed":"A scenario failed.","executableAdded":"The change adds content that runs: a script, a listener, an expression or a service.","connectionsIntroduced":"The change introduced a problem with a secret or a connection.","unreadable":"A changed file could not be read.","tooManyFiles":"The change touches more than {files} files, which is more than Penstock verifies.","tooLarge":"A changed file is larger than {megabytes} MB, which is more than Penstock verifies.","checkFailed":"The check could not run.","builtInRules":"The check used the built-in rules only, so the project's own rules were not applied.","scenariosWithheld":"Scenarios were not run, so the change is not fully verified."},"outcome":{"passed":"passed","failed":"failed","skipped":"skipped"},"summary":"{verdict}: {problems}, {scenarios}","newProblems":{"one":"{count} new problem","other":"{count} new problems"},"scenariosNotRun":"scenarios not run","scenariosSomeFailed":{"one":"{failed} of {count} scenario failed","other":"{failed} of {count} scenarios failed"},"scenariosPassed":{"one":"{count} scenario passed","other":"{count} scenarios passed"},"formattingOnly":"formatting only","diffCounts":"{added} added, {removed} removed, {changed} changed","moved":{"one":"{count} moved","other":"{count} moved"},"change":{"added":"added","removed":"removed","changed":"changed"},"checkLine":"Check: {before} problems before, {after} after, {resolved} fixed","freshLine":"new {severity} {rule} in {file}{where}","severity":{"error":"error","warning":"warning","note":"note"},"kind":{"script":"a script","listener":"a listener","service":"a service call","connector":"a connector","expression":"an expression","other":"executable content"},"executableLine":"adds {kind} in {element} ({file})","wasBefore":"(before: {outcome})","skip":{"no-processes":"no process was changed","not-licensed":"running scenarios is part of Penstock Pro","no-cases":"the process has no saved scenarios","no-engine":"no engine is configured for this project","not-for-tests":"the engine is not marked deployment.forTests","failed":"the run could not start","stopped":"the run was stopped before it ended","executable-added":"content that runs was added, so they were not run; run them with penstock receipt verify --run-scenarios","project-changed":"the change touches the project configuration or the test files","not-asked":"they were not requested; pass scenarios: true to ask","deployable-changed":"a decision, form, template or case that a run would deploy changed; run them with penstock receipt verify --run-scenarios","not-inspected":"part of the change could not be fully inspected (too many files, a file too large or unreadable)"},"scenariosSkipped":"Scenarios were not run: {reason}.","layoutApplied":{"one":"Auto layout or formatting was applied: {count} element moved.","other":"Auto layout or formatting was applied: {count} elements moved."},"attempt":{"one":"Attempt {n}: {count} new problem found.","other":"Attempt {n}: {count} new problems found."},"attemptHandedBack":{"one":"Attempt {n}: {count} new problem handed back to the agent.","other":"Attempt {n}: {count} new problems handed back to the agent."},"exhausted":{"one":"The agent did not fix them in {count} attempt.","other":"The agent did not fix them in {count} attempts."},"previewNote":"This is the free preview. The full receipt - the files, the new problems, the scenarios and the attempts - is part of Penstock Pro.","problem":{"type":"has the wrong kind of value","enum":"is not one of the allowed words","const":"has the wrong value","missing":"is missing","unknown":"is not a known key","forbidden":"is not allowed","tooLong":"is too long","tooShort":"is too short","tooMany":"has too many entries","tooFew":"has too few entries","range":"is out of range","shape":"has the wrong shape","deep":"is nested too deeply","reference":"points at nothing","choice":"does not fit any allowed form","tooLarge":"is larger than Penstock reads","notJson":"is not JSON"},"repair":{"intro":{"one":"Penstock checked your change and found {count} new error. Fix it without undoing the rest of the change (repair {n} of {max}).","other":"Penstock checked your change and found {count} new errors. Fix them without undoing the rest of the change (repair {n} of {max})."},"line":"- {rule} in {file}{where}: {message}","more":"and {count} more","outro":"Change only what is needed to fix them. Penstock checks again when you are done."},"checking":"Checking the change","rules":{"project-changed":"Checked with built-in rules only: project rules changed.","untrusted":"Checked with built-in rules only: this project's rules are not trusted (penstock trust).","not-inspected":"Checked with built-in rules only: part of the change could not be fully inspected."}},"dmnTests":{"unknownDecision":"There is no decision with the id {decision} in this file.","notEvaluated":"The decision {decision} could not be evaluated.","unreadableCells":"Penstock cannot evaluate these cells: {cells}.","outputDiffers":"{output}: expected {expected}, got {actual}","nothing":"nothing","rulesDiffer":"applied rules: expected {expected}, got {actual}","outside":"{file} is outside the project and is not read.","unreadable":"{file} cannot be read.","tooLarge":"{file} is larger than Penstock reads.","invalid":"{file} is not a valid test file: {problems}","dmnUnreadable":"{file} cannot be read as a DMN file.","tooMany":"A test file holds at most {max} cases.","notCovered":"rules not covered: {rules}","shadowed":"matched but never applied: {rules}","coverage":"{covered} of {total} rules covered ({percent}%)","pass":"pass","fail":"FAIL","error":"ERROR","rules":"rules {rules}","skipped":"not run: {count} (more than 3 cases per decision are part of Penstock Pro)","summary":"{passed} passed, {failed} failed, {errors} errors; rule coverage {percent}%","ui":{"title":"Saved tests for {decision}","runAll":"Run all","run":"Run","remove":"Remove","name":"Name","status":"Status","passed":"Passed","failed":"Failed","errored":"Error","notRun":"Not run","emptyTitle":"No saved tests for this decision yet","emptyHint":"Try values in the Try tab and press Save as test, or add a case from a rule below.","noDecisionTitle":"Select a decision table to see its tests","noDecisionHint":"Open a decision table, then save the cases you want to keep running.","noFileTitle":"Save the file to keep tests","noFileHint":"Tests are kept next to the DMN file as <name>.dmn.tests.json, so the file needs a place on disk.","coverageTitle":"Rule coverage","policyNote":"Counted for hit policy {policy}: a rule is covered when a case applies it.","notCoveredTitle":"Not covered","allCovered":"Every rule is covered by a saved case.","addCase":"Add case from rule {rule}","noSample":"Rule {rule} has a condition Penstock cannot turn into a value, so add its case from the Try tab.","matched":"Rules applied: {rules}","noRule":"No rule matched.","useActual":"Use the actual result as expected","freeLimit":"The free run covers 3 cases per decision. More cases, and running them from the command line, are part of Penstock Pro.","saveAsTest":"Save as test","testName":"Test name","defaultName":"Case {number}","saved":"Saved as test: {name}","saveFailed":"The test could not be saved: {reason}","loadFailed":"The saved tests could not be read: {reason}","cases":"Cases: {count}","nothingToSave":"Fill in the values of the Try tab first."}},"policy":{"refuse":{"shape":"\\"{key}\\" in the policy has the wrong shape.","tooMany":"The policy lists too many {what} (at most {max}).","rule":"The rule name \\"{rule}\\" is not allowed in a policy.","ruleKey":"The rule \\"{rule}\\" has an unknown setting \\"{key}\\".","severity":"The rule \\"{rule}\\" needs a severity of error, warn or off, and forced as true or false.","forcedOff":"The rule \\"{rule}\\" cannot be forced and off at the same time.","unknownKey":"The policy has an unknown entry \\"{key}\\".","plugin":"The policy names \\"{key}\\". A policy is data only and never loads or runs code, so it was refused.","unsafeKey":"The policy uses the reserved key \\"{key}\\".","name":"The policy needs a name of letters, digits, dots, dashes or underscores, at most 64 characters.","version":"The policy needs a version that is a whole number from 1 up.","palette":"The palette entry \\"{name}\\" is not an element the palette has.","path":"The path \\"{path}\\" must be a relative path inside the policy folder.","requiredChecks":"\\"{key}\\" is not a required check the policy knows (check, scenarios, dmnTests, receipt).","notJson":"{file} in the policy folder is not valid JSON.","notObject":"{file} in the policy folder must be one JSON object.","deep":"A policy file nests deeper than it is allowed to.","manifestMissing":"The policy folder has no {file}.","dirMissing":"The policy folder {path} does not exist.","outside":"The policy folder {path} is not a plain folder inside the project, so it was not read.","symlink":"{file} in the policy folder is a symbolic link, which a policy never follows.","notData":"{file} in the policy folder is not a data file (json, yaml, yml, md or txt).","unreadable":"{file} in the policy folder could not be read as data.","fileCount":"The policy folder has more than {max} files.","fileSize":"{file} in the policy folder is larger than {max} bytes.","totalSize":"The policy folder is larger than {max} bytes in all.","depth":"The policy folder has folders nested more than {max} deep.","pathMissing":"The policy names {path}, but the policy folder has nothing there.","lock":"{file} could not be read as a pin.","pin":"The pin is not a sha256 hash (sha256: and 64 hexadecimal digits)."},"header":{"pinned":"Policy: {name} v{version}, pinned","unpinned":"Policy: {name} v{version}, not pinned","mismatch":"Policy: {name} v{version}, the pin does not match","refused":"Policy refused: it could not be read as data"},"findingTag":"[policy: {name}]","init":{"exists":"{file} already exists; nothing was changed.","wrote":"Wrote {file}.","next":"Add rules with penstock policy add-rule, then fix the pack with penstock policy pin."},"addRule":{"severity":"The severity \\"{given}\\" is not one of {allowed}.","wrote":"Set the rule {rule} to {severity} {forced}","forced":"(forced)"},"pin":{"again":"The pack changed: run penstock policy pin to fix it again.","jsonConfig":"{file} is JSON, which this command does not rewrite. Put \\"policy\\": {\\"pin\\": ...} in it by hand, or use penstock.yaml.","wroteLock":"Pinned the policy in {file}: {pin}","configBroken":"{file} could not be read, so the pin was not written.","wrote":"Pinned the policy in {file}: {pin}"},"verify":{"none":"There is no policy pack here (.penstock/policy or a policy entry in penstock.yaml).","refused":"The policy pack was refused:","unpinned":"The policy pack is not pinned. Its hash is {hash}; run penstock policy pin to record it.","mismatch":"The policy pack does not match its pin.\\n pinned: {expected}\\n computed: {actual}\\nA file was changed, added or removed since it was pinned.","ok":"Policy {name} v{version} matches its pin (files: {files})."},"sync":{"noSource":"penstock.yaml has no policy: source: to fetch from.","badUrl":"The policy source must be an https:// or ssh:// address or a git@host:path address. A local folder on this machine is accepted only with --allow-local-source, and a network share never is.","badRef":"The policy ref must be a plain branch or tag name.","failed":"git could not fetch the policy pack. Nothing was installed.","refused":"The fetched policy pack was refused and nothing was installed:","pinRefused":"The fetched pack does not match the pin, so it was not installed.\\n pinned: {expected}\\n fetched: {actual}","done":"Fetched policy {name} v{version} into {dir}.","pinned":"It matches the pin.","mismatch":"It does not match the pin ({expected} against {actual}).","unpinned":"It is not pinned yet: run penstock policy pin."},"gate":{"refused":"The policy pack was refused, so the policy could not be checked:","unpinned":"The policy is not pinned (run penstock policy pin and commit the result).","mismatch":"The policy files do not match the pin ({expected} pinned, {actual} found).","ruleOff":"The forced rule {rule} is turned off.","severity":"The severity of the forced rule {rule} is lowered ({change}).","ruleUnreadable":"The setting of the forced rule {rule} could not be read.","palette":"The palette is wider than the policy allows ({name}).","checkFailed":"The check found errors, and the policy requires it to pass.","required":{"missing":"The policy requires {check}, and it has not run.","failed":"The policy requires {check}, and it failed.","stale":"The policy requires {check}, and its last run was for different files than these."},"ok":"Policy {name} v{version}: pinned, not weakened, required checks done.","failed":"Policy {name} v{version} is not met:"},"check":{"scenarios":"scenarios","dmnTests":"DMN tests","receipt":"the AI change receipt"},"show":{"none":"There is no policy pack here. Create one with penstock policy init.","folder":"Folder: {dir}","hash":"Hash: {hash}","forced":"Forced rules: {rules}","defaults":"Default rules: {rules}","palette":"Palette: {names}","required":"Required checks: {names}","nothing":"none"},"ciNeedsTeam":"Enforcing a policy pack in a pipeline is a Team feature.","screen":{"title":"Policy","empty":"This project has no policy pack.","emptyHint":"A policy pack is a folder in git that sets rules, conventions, a palette and required checks for everyone. Create one with penstock policy init.","locked":"Set by policy","lockedHint":"This setting comes from the policy {name}. Change it in the policy pack, not here.","folder":"Folder","hash":"Hash","files":"Files","rules":"Rules","noRules":"The policy sets no rules.","forced":"forced","default":"default","severity":{"error":"error","warn":"warning","false":"off"},"palette":"Palette","noPalette":"The policy does not limit the palette.","conventions":"Conventions","noConventions":"The policy sets no conventions.","templates":"Element templates","noTemplates":"The policy adds no element templates.","requiredHeading":"Required checks","noRequired":"The policy requires no checks.","required":{"check":"The check passes","scenarios":"Scenarios pass","dmnTests":"DMN tests pass","receipt":"An AI change receipt exists"},"refused":"The pack was refused and none of it applies","close":"Done"},"dialog":{"title":"Policy"}},"promotion":{"approval":{"badHash":"The hash of {file} should be 64 hexadecimal characters.","expired":"The approval ended at {until}.","fileChanged":"{file} has changed since it was approved.","fileNotApproved":"{file} is not in the approval.","inTheFuture":"The approval is dated in the future.","missing":"The approval should have {field}.","notJson":"The approval is not valid JSON.","notObject":"The approval should be a JSON object.","nothingToApprove":"No file is being promoted, so there is nothing to approve.","otherEnvironment":"The approval is for {approved}, and this promotion goes to {target}.","outside":"The approval file should be a regular file inside the project, not a link.","tooLarge":"The approval file is larger than 256 KB.","tooManyFiles":"The approval lists more than {limit} files.","unknownKey":"The approval has a key Penstock does not know: {key}.","unreadable":"The approval file could not be read.","version":"The approval should have version 1.","windowBackwards":"The approval ends before it was given.","windowTooLong":"The approval should be valid for at most {days} days."},"deploy":{"protectedNothingSent":"{name} is protected and nothing was sent.","onlyChanged":"What is sent","onlyChangedHint":"Only what changed: skip what the engine already runs","nothingToSend":"Nothing was sent to {target}: {names} is the same as what it runs (unchanged, skipped).","confirmLabel":"Type {name} to confirm","protectedHint":"{name} is a protected environment: nothing is deployed to it until you type its name."},"drift":{"needsEnvironment":"Name the environment to read with --env. Environments: {known}."},"environment":{"noEngineApi":"This engine has no deployment API that Penstock reads.","noUrl":"The environment has no deployment.url.","inheritedUrl":"The profile does not set its own deployment.url, so it would reach the engine of another environment.","unknown":"{name} is not an environment of penstock.yaml. Environments: {known}."},"onlyChanged":{"notCompared":"Could not compare with the engine ({reason}), so everything is sent.","unchanged":"unchanged, skipped"},"project":{"tooMany":"The project has more than {limit} diagrams, decisions and forms, so nothing was compared."},"promote":{"approvalRefused":"The approval {file} was refused:","duplicate":"{key} is defined in more than one file: {files}.","formNotRecorded":"No record that this form was deployed to {from}.","needsApproval":"{name} is protected, and in a pipeline it needs an approval record: pass --approve-file.","needsBoth":"Name both environments: penstock promote --from <environment> --to <environment>.","needsConfirm":"{name} is protected: pass --confirm {name} to say you mean it.","notRead":"{name} could not be read: {reason}","notReady":"{name} cannot be used: {reason}","notVerified":"not the content on {from} ({state})","policyFailed":"The policy pack {name} v{version} is not satisfied, and a pipeline enforces it.","sameEngine":"Both environments point to {place}.","sameEnvironment":"The source and the target are the same environment.","sameFileName":"Two files would be deployed as {name}: {first} and {second}.","secretMissing":"{name} is not defined for {target}.","unreadable":"{file} cannot be read as a diagram, so it is not promoted."},"read":{"credentials":"The engine refused the credentials (status {status}).","noResource":"The engine sent no resource for {key}.","notJson":"The engine answered something that is not JSON.","status":"The engine answered with status {status}.","tooLarge":"The resource of {key} is too large to compare.","tooMany":"The engine has more than {limit} definitions, so nothing was compared.","tooManyToRead":"More than {limit} resources would have to be read from the engine, so nothing was compared.","unreachable":"The engine could not be reached: {reason}"},"text":{"approvalIsARecord":"An approval is a record kept in git: it names who approved and when, and it is checked against the files. It is not a signature or a cryptographic proof.","approvalNotOk":"The approval record was refused.","approvalOk":"Approval record accepted: approved by {by} at {at}, valid until {until}.","blocked":"Blocked:","cannotVerify":"cannot be checked here","comparison":"{a} compared with {b}:","compatOk":"The files fit the engine.","compatTitle":"Compatibility with {to} (engine {version}):","confirmed":"Confirmed with --confirm.","deployFailed":"The deployment failed: {message}","deployed":"Deployed: {message}","driftTitle":"Drift: {names}","forTests":"for tests","formsNotCompared":"Forms are not read from an engine and are not compared ({count}).","header":{"action":"Action","details":"Details","file":"File","resource":"Resource"},"noAddress":"no address","noApproval":"No approval record was given (--approve-file).","noPolicy":"No policy pack in this project.","noSecretsMissing":"Nothing the files name is missing.","notConfirmed":"Not confirmed: pass --confirm {name}.","nothingFound":"No process or decision found.","nothingToPromote":"Nothing to promote: the target already has these files, or nothing is verified on the source.","policyEnforcedFailed":"Enforced in this pipeline: not satisfied.","policyEnforcedOk":"Enforced in this pipeline: satisfied.","policyLine":"Policy {name} v{version}, {pin}.","policyNotEnforced":"Shown only: a pipeline enforces it (Team).","policyTitle":"Policy pack:","protected":"protected","protectionTitle":"{to} is a protected environment:","runWrite":"Run again with --write to promote {from} to {to}.","sameEverywhere":"{a} and {b} have the same content.","sameOnTarget":"same on {to}","secretsTitle":"Secrets and clients {to} needs:","unknownVersion":"version not known","unreadable":"Not readable as diagrams: {files}.","promotingNow":"Promoting {from} to {to}","dryRun":"Dry run: promoting {from} to {to} (nothing is sent)","pin":{"pinned":"pinned","unpinned":"not pinned","mismatch":"does not match its pin"}},"state":{"in-sync":"in sync","local-ahead":"local ahead","engine-ahead":"engine ahead","differs":"differs","only-local":"only local","only-engine":"only on engine","in-syncHint":"The file and the engine have the same content","local-aheadHint":"Your file changed since it was last deployed here, and the engine still has that deployment","engine-aheadHint":"The engine runs something else than the last deployment from here, and your file did not change since","differsHint":"Changed on both sides, or there is no record of a deployment from here","only-localHint":"The engine does not have it yet","only-engineHint":"The engine has it, and no file of the project defines it"},"status":{"read":"read","unreachable":"not reachable","refused":"refused","not-configured":"not set up"},"action":{"create":"create","update":"update","unchanged":"unchanged","skipped":"skipped"},"compare":{"same":"same","different":"{a} and {b} differ","only-a":"only on {a}","only-b":"only on {b}"},"compat":{"family":"{file} is written for {subject} ({found}), and {target} is {wanted}.","newer":"{file} targets version {found}, newer than the engine of {target} ({wanted}).","template":"{file} uses the element template {subject}, which needs engine {found}, and {target} runs {wanted}.","unknown-version":"{file} names version {found}, which cannot be compared with {wanted}."},"count":{"file":{"one":"{count} file to deploy","other":"{count} files to deploy"}},"screen":{"title":"Environments and drift","help":"Compares your files with the latest version each environment runs. Nothing is changed, and only environments that penstock.yaml declares are asked.","loading":"Reading the environment…","failed":{"title":"The comparison could not be made","hint":"Check the connection of the environment, then refresh."},"environment":"Environment","compareWith":"Compare with","compareNone":"No comparison","hideSynced":"Hide what is in sync","refresh":"Refresh","clean":"Everything is in sync.","empty":{"title":"No process or decision found","hint":"Add a BPMN or DMN file to the project to compare it with an environment."},"pro":{"title":"Compare two environments","text":"Reading one environment against your files is free, with no time limit. Comparing two environments with each other, and promoting between them, is part of Pro.","unlock":"Unlock comparison"}}},"evidence":{"zip":{"badName":"The name \\"{name}\\" is not allowed in a pack: it should be a relative path inside the pack.","tooManyFiles":"The pack would hold more than {limit} files, so it was not written.","duplicate":"The name \\"{name}\\" appears twice in the pack.","tooLarge":"The file \\"{name}\\" is larger than a pack allows.","tooBig":"The pack would be larger than {megabytes} MB, so it was not written or read.","malformed":"The file is not a readable zip.","special":"\\"{name}\\" is a link or a special file, which a pack never holds.","unsupported":"The entry \\"{name}\\" is encrypted or compressed in a way a pack does not use.","crc":"The entry \\"{name}\\" does not match its stored checksum."},"write":{"symlink":"\\"{path}\\" is a link, and a pack is never written through a link.","notTheKind":"\\"{path}\\" is not the kind of place a pack can be written to.","exists":"\\"{path}\\" already exists. Use --force to replace it.","notAPack":"\\"{path}\\" is a folder that is not an evidence pack, so it was left alone even with --force."},"verify":{"tooDeep":"\\"{path}\\" is nested deeper than a pack goes.","manifestUnreadable":"The manifest evidence.json cannot be read as a Penstock evidence manifest.","missing":"\\"{path}\\" does not exist.","unreadable":"\\"{path}\\" could not be read.","noManifest":"The pack has no evidence.json manifest.","noSeal":"The pack has no evidence.sha256 seal.","sealUnreadable":"The seal evidence.sha256 is not in the expected form.","sealMismatch":"The manifest does not match its seal: it was changed after the pack was built.","missingFile":"The manifest lists \\"{file}\\" but the pack does not hold it.","changedFile":"\\"{file}\\" was changed: its checksum or size no longer matches the manifest.","extraFile":"\\"{file}\\" is in the pack but not in the manifest."},"dialog":{"title":"Create evidence pack","intro":"One package for an audit: the diagrams, the checks, the recorded test results, the AI receipts and a list of every file with its SHA-256. It never holds a secret value.","since":"Changes since","sinceHint":"A git ref such as origin/main. The pack then also shows what changed, drawn in diagram terms.","sinceError":"The ref should be a branch, tag or commit name without spaces","format":"Format","formatZip":"A zip file","formatDir":"A folder","replace":"Earlier pack","replaceBox":"Replace the pack that is already there","create":"Create pack","running":"Building the pack…","ready":"The pack is ready. Files listed: {files}.","sealNote":"evidence.sha256 is the SHA-256 of evidence.json. It shows that the pack was changed afterwards; it is not a signature and not a legal attestation.","verify":"To check it later, run {command} with the path of the pack.","refused":"The pack could not be created"}},"heatmap":{"heading":"Heat map","intro":"Colours the diagram from the engine’s history: how often each element ran, how long it took and how often it failed. Read only.","process":"Process","period":"Period","metric":"Colour by","periods":{"1h":"Last hour","24h":"Last 24 hours","7d":"Last 7 days","30d":"Last 30 days"},"metrics":{"duration":"95th percentile duration","count":"Visits","failure":"Failure rate"},"show":"Show heat map","reload":"Reload","hide":"Hide","loading":"Reading the history…","summary":"Steps read: {rows}. Elements coloured: {painted}. Period: {period}.","versions":"Versions of the process included: {count}.","truncated":"The history holds more than Penstock reads at once, so the map covers only part of it. Choose a shorter period.","empty":"No element ran in this period.","slowest":"Slowest elements","failing":"Most failing elements","slowDetail":"95th percentile {p95} · average {average} · visits {visits}","failDetail":"Failed {rate}% · incidents {incidents} · cancelled {canceled} · visits {visits}","element":{"title":"Visits: {visits}. Average: {average}. 95th percentile: {p95}. Incidents: {incidents}. Cancelled: {canceled}. Failure rate: {rate}%."},"none":"none","problem":{"badProcess":"The process id is empty, too long or holds a control character, so nothing was asked of the engine.","notDeployed":"The engine has no deployed process {process}."}},"incidentLoop":{"title":"Fix this incident end to end","intro":"Reproduces the incident, uses the fix from the editor, checks it with the scenario, sends only the changed file and retries the failed work. A rehearsal changes nothing; a real run asks before every change.","open":"Fix end to end…","rehearse":"Rehearse","run":"Run for real","aborted":"Stopped before this step.","rolledBack":"The file was put back as it was.","rollbackFailed":"The file could not be put back: {reason}","retried":"Retried {what}.","steps":{"reproduce":"Reproduce with the scenario","fix":"Apply the fix","verify":"Check the fix with the scenario","deploy":"Send only the changed file","retry":"Retry the failed work"},"states":{"pending":"Waiting","running":"Running","done":"Done","wouldDo":"Would do","skipped":"Skipped","failed":"Stopped","declined":"Declined"},"fix":{"noChange":"{file} has no changes compared with the saved file. Make the fix in the editor first, then run this again.","would":"Would use the fix in {file}.","applied":"Using the fix in {file}."},"verify":{"passes":"The scenario now ends without the incident.","fails":"The scenario still fails: {reason}"},"deploy":{"nothing":"The engine already has this version, so nothing was sent and nothing is retried.","would":"Would send {files} to {target}.","sent":"Sent {files} to {target}.","accept":"Send"},"retry":{"would":"Would retry {what}.","accept":"Retry"},"protected":{"title":"This connection is protected","text":"{name} is marked protected. Send the fix to it only if you mean to.","accept":"Send to the protected connection"},"confirm":{"fix":"Use the fix in {file}?","deploy":"{what} Send it?","retry":"{what} Retry it now?"},"result":{"done":"Done. The fix is on the engine and the failed work was retried.","rehearsed":"Rehearsal finished: every step would go through, and nothing was changed.","stopped":"Stopped at: {step}. Nothing after it was done."},"problem":{"noIncidentId":"The incident has no usable id, so nothing was retried.","noJob":"Could not find exactly one failed job for incident {incident}, so nothing was retried.","noRetryFor":"An incident of type {type} cannot be retried this way.","retryRefused":"The engine refused to retry {what} (status {status})."},"what":{"job":"job {id}","externalTask":"external task {id}","incident":"incident {id}"}},"replay":{"open":"Replay this instance","loading":"Reading the instance…","previous":"Previous step","next":"Next step","position":"Step {number} of {total}","truncated":"Only the first {limit} steps are shown.","steps":"Steps of the instance","states":{"COMPLETED":"Completed","ACTIVE":"Active","TERMINATED":"Cancelled","FAILED":"Failed"},"variablesThen":"Variables when the step started","variablesNow":"Variables the instance has now","currentNote":"The engine keeps only the latest value of each variable, so every step shows these.","cut":"The variables of this step are too large to show.","noVariables":"No variables.","variablesTable":"Variables at this step","changedHere":"changed here","incidents":"Incidents of the instance","whatIf":{"open":"What if from this token…","tooltip":"Start a new instance at this element with the variables edited","title":"What if from this token","intro":"Starts a new instance at {element} with the variables below, which you can edit. Nothing in the original instance changes.","secrets":"These variables look secret and are shown as <redacted>: {names}. Replace or remove them before you start.","latestVersion":"The new instance runs the latest deployed version of the process.","variables":"Variables (JSON)","variablesHint":"An object of names and values.","plan":"Will start an instance of {process} at {element} on {target}. Variables: {count}.","start":"Start instance","started":"Started instance {instance}."},"problem":{"badInstance":"The instance id is empty, too long or holds a control character, so nothing was asked of the engine.","noSteps":"The engine has no history of steps for instance {instance}.","variablesTooLarge":"The variables are larger than 256 KB.","tooManyVariables":"At most {limit} variables can be sent.","badVariableName":"A variable name is empty, too long, holds a control character or is __proto__.","redacted":"The variable {name} still holds <redacted>. Replace it with the real value or remove it.","badProcess":"The process id is empty, too long or holds a control character.","badElement":"{element} is not an element of this diagram that a token can start at."}},"refactor":{"kind":{"variable":"Process variable","message":"Message name","signal":"Signal name","error":"Error code","escalation":"Escalation code","job-type":"Job type","topic":"External task topic","decision":"Decision id","form":"Form key","process":"Process id (target of call activities)"},"reason":{"dynamicExpression":"an expression that reads variables in a way that cannot be followed","syntax":"an expression that does not parse, so its names cannot be told apart","binding":"a name bound again inside the expression, which hides the variable","filter":"a filter whose items may carry a field of the same name","encoded":"the name is written with character references that are not safe to rewrite","script":"a script, which is never rewritten","literal":"the name appears as plain text inside an expression","concatenation":"a name built by joining text, so it cannot be located","dynamicName":"variables read by a computed name in the code","boundByName":"a parameter bound by the variable name, which has to be renamed by hand","placeholder":"a placeholder in a template, which is not rewritten","escaped":"the name is written with escapes that are not safe to rewrite","tooLarge":"the file is too large to read safely","notText":"the file is not readable text","unreadable":"the file could not be read","tooManyFiles":"the project has more files than a rename reads","malformed":"the place did not read as expected, so it was left alone","symlink":"a link, which is never followed","outside":"the file is outside the project"},"blocker":{"empty":"a name is empty","same":"the new name is the same as the old one","unwritable":"the new name has characters that cannot be written safely","tooLong":"a name is longer than {detail} characters","expression":"the new name is an expression, not a name","badName":"{detail} is not a valid name for this kind","exists":"the new name is already used in {detail} places","nothing":"nothing uses the old name","unknownKind":"this kind of rename is not known","tooMany":"more than {detail} places would change","unreadable":"the project could not be read"},"extract":{"malformed":"the diagram is not well-formed","noEngine":"the diagram does not say whether it is for Camunda 7 or Camunda 8","noElements":"no element is selected","tooMany":"more than {detail} elements are selected","notFound":"the element {detail} is not in the diagram","badProcessId":"{detail} is not a valid process id","badName":"{detail} is not a valid name","processIdTaken":"a process with the id {detail} already exists","mixedScope":"the selected elements are not all in the same scope","unsupportedKind":"{detail} cannot be moved into a called process","subprocessKind":"only an embedded subprocess can be extracted whole ({detail})","compensation":"{detail} takes part in compensation","link":"{detail} is a link event, which cannot cross into another process","dataAssociation":"{detail} uses a data object or a data store","artifact":"{detail} ties an annotation or group to the selection","messageFlow":"{detail} is a message flow that would cross into the new process","ioMapping":"{detail} already has its own input or output mapping","entry":"the selection must have exactly one way in, and has {detail}","exit":"the selection must have exactly one way out, and has {detail}","exitCondition":"the way out ({detail}) has a condition or is a default flow","disconnected":"{detail} is not connected to the rest of the selection","boundary":"the boundary event {detail} is not selected together with its task, or the other way round","outsideReference":"{detail} refers to something outside the selection","syntax":"an expression cannot be read, so its variables cannot be mapped ({detail})","dynamicVariable":"variables are read by a computed name, so they cannot be mapped ({detail})","exitEvent":"the end event {detail} is typed, which cannot be left as the way out","invalidResult":"the result would not stay valid ({detail}), so nothing was changed","nameTaken":"the file {detail} already exists"},"mapping":{"tooLarge":"the mapping file is larger than 256 KB","tooMany":"the mapping has more than {detail} renames","badJson":"the mapping is not valid JSON with a list of renames","badLine":"line {line} must be kind,old,new","badKind":"line {line}: {detail} is not a kind of name","badEntry":"entry {line} needs a kind, a from and a to, all as text","empty":"the mapping has no renames"},"stop":{"tooLarge":"The project is too large to read safely ({detail} files).","changed":"{detail} changed after the preview, so nothing was written.","planChanged":"The project changed after the preview, so nothing was written. Preview again.","blocked":"The plan is blocked, so nothing was written.","refused":"{detail} places were refused. Acknowledge them to apply the rest and leave those as they are.","unsafe":"{detail} is outside the project or is a link, so nothing was written.","writeFailed":"A file could not be written and every file was put back: {detail}","dirty":"The git tree has uncommitted changes, so nothing was written. Commit or stash them first, or force it."},"text":{"request":"Rename {kind} {from} to {to}","blocker":"Step {step} cannot be applied: {reason}","edit":" {line}:{column} {where}: {before} -> {after}","refused":" left alone, {file}:{line}: {reason} ({where})","refusedBlocking":" refused, {file}:{line}: {reason} ({where})","more":" ... and {count} more","summary":"{edits} edits in {files} files, {refused} places left alone.","applied":"Applied: {edits} edits in {files} files, {refused} places left alone.","previewOnly":"Preview only, nothing was written. Add --apply to write it.","cannotApply":"Nothing can be applied until the problems above are resolved.","extractTo":"Extract into {created}, with the call activity {call} in its place","extractMoved":"Elements moved: {count}","extractIn":"Passed into the called process: {names}","extractOut":"Passed back: {names}","extractPreview":"Preview only, nothing was written. Add --apply to write it.","extractApplied":"Written: the new process file and the changed diagram.","everything":"all variables","nothing":"no variables"},"cli":{"uncRoot":"A network share (UNC) path cannot be the project root.","mappingMissing":"The mapping file {file} was not found.","mappingNotFile":"The mapping is not a regular file.","mappingOutside":"The mapping file is outside the project.","needsRename":"Name the kind, the current name and the new name: penstock refactor rename <kind> <old> <new>","unknownKind":"{kind} is not a kind of name. Use one of: {kinds}.","needsMapping":"Name a mapping file: penstock refactor bulk <mapping-file>","needsExtract":"Name the diagram, the element ids and the new process id: penstock refactor extract <file.bpmn> <ids> <process-id>","unknownAction":"Unknown refactor action. Use one of: {actions}."},"usage":{"rename":"rename a name across the project, with a preview first","bulk":"apply the renames of a mapping file in order (Pro)","extract":"move a subprocess or fragment into its own process and call it (Pro)"},"mcp":{"needsPlanId":"{tool}: applying needs the planId from a preview of the same request."},"dialog":{"title":"Refactor","intro":"Rename a name across the diagrams, decisions, forms, templates, configuration, tests and code, or move part of a diagram into its own process. Nothing is written until you apply.","mode":"What to do","modeRename":"Rename one name","modeBulk":"Rename from a list (Pro)","modeExtract":"Extract to a call activity (Pro)","kind":"Kind of name","from":"Current name","to":"New name","mapping":"Renames","mappingHint":"One per line as kind,old,new, or JSON with a renames list. They are applied in order.","file":"Diagram","fileHint":"The project path of the BPMN file, such as processes/order.bpmn.","elements":"Elements","elementsHint":"The id of one subprocess, or the ids of the elements to move, separated by commas.","processId":"New process id","name":"Name of the new process","preview":"Preview","apply":"Apply","change":"Change","acknowledge":"Apply although the places listed as refused stay as they are","force":"Apply although the git tree has uncommitted changes","running":"Working…","summary":"Edits: {edits}. Files: {files}. Left alone: {refused}.","editsHeading":"Will change","refusedHeading":"Left alone","blockedHeading":"Cannot apply","line":"line {line}","applied":"Done. Edits: {edits}. Files: {files}.","extractApplied":"Created {created} and replaced the selection with a call activity.","extractPlan":"New file {created}. Elements moved: {count}. Passed in: {inputs}. Passed back: {outputs}.","pro":"Bulk renames and Extract to Call Activity are part of Penstock Pro. A single rename is free, with no time limit.","failed":"The refactoring could not run: {reason}"}},"lsp":{"hoverWhy":"Why it matters","hoverFix":"How to fix it","hoverDocs":"Rule documentation","elementType":"Type","elementId":"Id","elementName":"Name","calledProcess":"Called process","calledDecision":"Called decision","form":"Form","formKey":"Key","jobType":"Job type","hitPolicy":"Hit policy","variables":"Variables in scope","openDocs":"Open the documentation of {rule}","fixExecutable":"Mark the process as executable","fixTimeToLive":"Set the history time to live to 30 days (P30D)","fixRemoveLabel":"Delete the label","capped":"Penstock shows the first {count} findings of this file. Fix these and check again to see the rest.","tooLarge":"This file is larger than {limit} MB, so Penstock does not read it in the editor.","outsideWorkspace":"This file is outside the folders the editor opened, so Penstock does not check it. Open its project folder.","checkStopped":"The check stopped before it finished. Save the file to try again.","related":"Also involved: {name}","xmlMalformed":"The XML is not well formed here.","xmlRefused":"Penstock does not read this XML: it has a document type declaration, is nested more than 200 levels deep or has more than 400000 elements.","jsonInvalid":"The JSON is not valid here.","stdioOnly":"penstock lsp speaks over stdin and stdout only, so {option} is not supported. Start it as: penstock lsp --stdio","terminalHint":"penstock lsp is started by an editor and talks to it over stdin and stdout. Put \\"penstock lsp --stdio\\" in the language server settings of the editor (see penstock lsp --help)."}}`),libs:{Configuration:`Configuration`,"Hit policy:":`Hit policy`,"Remove list item {index}":`Remove list item {index}`,"Section contains a warning":`Section contains a warning`}},s={en:o},c={ru:()=>e(()=>import(`./ru-B6Vc-zq8.js`),[],import.meta.url),de:()=>e(()=>import(`./de-BTDorMeU.js`),[],import.meta.url),zh:()=>e(()=>import(`./zh-i-4nbAHI.js`),[],import.meta.url),ja:()=>e(()=>import(`./ja-DVqdcuHl.js`),[],import.meta.url),ko:()=>e(()=>import(`./ko-CRptKWR-.js`),[],import.meta.url),es:()=>e(()=>import(`./es-CR6ISPVl.js`),[],import.meta.url),"pt-BR":()=>e(()=>import(`./pt-BR-BfrprD8Z.js`),[],import.meta.url),fr:()=>e(()=>import(`./fr-DwvAkT7i.js`),[],import.meta.url),pl:()=>e(()=>import(`./pl-Bj0mC7Bu.js`),[],import.meta.url),it:()=>e(()=>import(`./it-DyGmdw18.js`),[],import.meta.url),nl:()=>e(()=>import(`./nl-CEt8h9GJ.js`),[],import.meta.url),tr:()=>e(()=>import(`./tr-C9yQyV09.js`),[],import.meta.url),uk:()=>e(()=>import(`./uk-DN_g1J3t.js`),[],import.meta.url),cs:()=>e(()=>import(`./cs-Dq6nyTaJ.js`),[],import.meta.url),id:()=>e(()=>import(`./id-rbO9ARH7.js`),[],import.meta.url),vi:()=>e(()=>import(`./vi-BPsdioG-.js`),[],import.meta.url),"zh-TW":()=>e(()=>import(`./zh-TW-9dUNIGWo.js`),[],import.meta.url)};function catalogFor(e){return s[e]??s.en??o}async function loadCatalog(e){e===`en`||s[e]||(s[e]=(await c[e]()).default)}var l=new Map;function categories(e){let n=l.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(`en`)}l.set(e,n)}return n}function at(e,n){let r=e;for(let e of n.split(`.`)){if(typeof r!=`object`||!r)return;r=r[e]}return r}function forms(e,n,r,i){let a=at(e,n);if(r===void 0)return typeof a==`string`?a:void 0;if(typeof a==`object`&&a){let e=a[categories(i).select(r)];if(typeof e==`string`)return e;let n=a.other;return typeof n==`string`?n:void 0}return typeof a==`string`?a:void 0}function createTranslator(e,n=s){let r=n[e]??n.en,i=n.en;return(n,a)=>{let o=typeof a?.count==`number`?a.count:void 0,s=forms(r,n,o,e);if(s!==void 0)return interpolate(s,a);let c=forms(i,n,o,`en`);return c===void 0?n:interpolate(c,a)}}var u=`en`;function locale(){return u}function setLocale(e){u=e}function t(e,n){return createTranslator(u)(e,n)}export{catalogFor as a,browserLocale as c,t as i,languageOf as l,locale as n,loadCatalog as o,setLocale as r,interpolate as s,createTranslator as t,resolveLocale as u};
1
+ import"./rolldown-runtime-B8BYMn-z.js";import{t as e}from"./preload-helper-DExCAR_V.js";var n=[{locale:`en`,language:`en`,name:`English`,vscode:``,quotes:[``,``]},{locale:`ru`,language:`ru`,name:`Русский`,vscode:`ru`,quotes:[`«`,`»`]},{locale:`de`,language:`de`,name:`Deutsch`,vscode:`de`,quotes:[`„`,`“`]},{locale:`zh`,language:`zh`,name:`简体中文`,vscode:`zh-cn`,quotes:[`「`,`」`],script:`hans`,preferred:!0},{locale:`ja`,language:`ja`,name:`日本語`,vscode:`ja`,quotes:[`「`,`」`]},{locale:`ko`,language:`ko`,name:`한국어`,vscode:`ko`,quotes:[`「`,`」`]},{locale:`es`,language:`es`,name:`Español`,vscode:`es`,quotes:[`"`,`"`]},{locale:`pt-BR`,language:`pt`,name:`Português (Brasil)`,vscode:`pt-br`,quotes:[`"`,`"`],regions:[`BR`],strict:!0},{locale:`fr`,language:`fr`,name:`Français`,vscode:`fr`,quotes:[`« `,` »`]},{locale:`pl`,language:`pl`,name:`Polski`,vscode:`pl`,quotes:[`„`,`”`]},{locale:`it`,language:`it`,name:`Italiano`,vscode:`it`,quotes:[`«`,`»`]},{locale:`nl`,language:`nl`,name:`Nederlands`,vscode:`nl`,quotes:[`“`,`”`]},{locale:`tr`,language:`tr`,name:`Türkçe`,vscode:`tr`,quotes:[`“`,`”`]},{locale:`uk`,language:`uk`,name:`Українська`,vscode:`uk`,quotes:[`«`,`»`]},{locale:`cs`,language:`cs`,name:`Čeština`,vscode:`cs`,quotes:[`„`,`“`]},{locale:`id`,language:`id`,name:`Bahasa Indonesia`,vscode:`id`,quotes:[`“`,`”`]},{locale:`vi`,language:`vi`,name:`Tiếng Việt`,vscode:`vi`,quotes:[`“`,`”`]},{locale:`zh-TW`,language:`zh`,name:`繁體中文`,vscode:`zh-tw`,quotes:[`「`,`」`],script:`hant`,regions:[`TW`,`HK`,`MO`]}],r={zh:{CN:`hans`,SG:`hans`,TW:`hant`,HK:`hant`,MO:`hant`}};n.map(e=>e.locale);function languageOf(e){return n.find(n=>n.locale===e)??n[0]}var i={in:`id`};function parts(e){let n=e.trim().replace(/[.@].*$/,``).replace(/_/g,`-`).split(`-`).filter(e=>e.length>0),r=(n.shift()??``).toLowerCase(),a=Object.hasOwn(i,r)?i[r]:r,o=``,s=``;for(let e of n)e.length===4?s||=e.toLowerCase():e.length===2&&(o||=e.toUpperCase());return{language:a,region:o,script:s}}function resolveLocale(e){if(typeof e!=`string`)return`en`;let{language:i,region:a,script:o}=parts(e),s=n.filter(e=>e.language===i);if(s.length===0)return`en`;let c=o||(Object.hasOwn(r,i)?r[i][a]:void 0)||``;if(c)return s.find(e=>e.script===c)?.locale??`en`;let l=a?s.find(e=>e.regions?.includes(a)):void 0;if(l)return l.locale;let u=s.find(e=>e.preferred)??s[0];return a&&u.strict?`en`:u.locale}function browserLocale(e){return resolveLocale(e?.language??(typeof navigator>`u`?void 0:navigator.language))}var a=/\{([^{}]*)\}/g;function interpolate(e,n){return n?e.replace(a,(e,r)=>{let i=Object.hasOwn(n,r)?n[r]:void 0;return i==null?e:String(i)}):e}var o={app:JSON.parse(`{"name":"Penstock","common":{"loading":"Loading…","learnMore":"Learn more","close":"Close","optional":" (optional)","add":"Add","back":"Back","cancel":"Cancel","checkAgain":"Check again","code":"Code","comments":"Comments","copy":"Copy","delete":"Delete","done":"Done","engine":"Engine","export":"Export","monitor":"Monitor","next":"Next","open":"Open","overview":"Overview","paste":"Paste","problems":"Problems","properties":"Properties","recheck":"Recheck","redo":"Redo","reload":"Reload","remove":"Remove","retry":"Retry","save":"Save","scenarios":"Scenarios","search":"Search","showAll":"Show all","skip":"Skip","stop":"Stop","undo":"Undo","variables":"Variables","more":"+{number} more","copyCommand":"Copy the command","commandCopied":"Copied"},"config":{"problem":{"syntaxWhy":"the file could not be read as YAML - {reason}.","typeOfFile":"the file should hold {expected}, it is {found}.","type":"{key} should be {expected}, it is {found}.","unknownKey":"Penstock reads no setting called {key}, so it is left out.","insteadStopped":"Nothing is read from this file until it is fixed.","insteadIde":"Penstock uses the settings from the IDE until the file is read."},"brokenTitle":"{0} could not be read","reason":{"nestedMapping":"one value is nested under a value on the same line","duplicateKey":"the same setting is written twice","tabIndentation":"a tab is used where the indent needs spaces","implicitKey":"a setting is written on the same line as the one above it","unclosed":"the file ends in the middle of a value"},"expect":{"text":"text","flag":"true or false","number":"a number","list":"a list of texts","section":"a section of settings","freeSection":"a section of settings","oneOf":"one of {values}"},"found":{"text":"text","flag":"true or false","number":"a number","list":"a list","section":"a section","nothing":"nothing"},"file":{"readsInstead":"Penstock reads this file instead of the IDE settings.","overrides":"A penstock.yaml in a subfolder overrides this one for the diagrams under it.","templatesFrom":"Folders to read Camunda element templates from:","secretsStay":"Passwords and secrets stay in the IDE password safe, never here."},"local":{"writtenBy":"Written by Penstock for this machine. Keep it out of version control.","valuesWin":"The values here win over penstock.yaml; delete a key to fall back to the project’s answer.","gitignore":"Penstock, this machine only","wrapperWhichPenstock":"The Penstock this project runs. Commit it, and everyone runs the same one.","wrapperChangeVersion":"Change the version by hand, or run: ./penstockw update [version]"}},"palette":{"label":"Command palette","search":"Find an action…","hint":"Arrow keys to move, Enter to run, Shift+Enter to pin to or unpin from the toolbar, Escape to close","actions":"Actions","matches":{"one":"{count} action","other":"{count} actions"},"noMatch":"No action matches \\"{query}\\"","pin":"Pin to the toolbar","unpin":"Unpin from the toolbar"},"export":{"title":"Export diagram","diagram":"Diagram","mainDiagram":"Main Diagram","theme":"Theme","themeLight":"Light","themeDark":"Dark","themeDracula":"Dracula","schema":"Schema","schemaDefault":"Default","schemaSketchy":"Sketchy","format":"Format","background":"Use background","cancel":"Cancel","copy":"Copy","export":"Export","exporting":"Exporting...","copyTitle":"Copy the picture with these settings, as a PNG","previewFailed":"Unable to render the diagram preview","copyFailed":"The picture could not be copied","notLoaded":"Unable to export: the diagram preview did not load","unnamedSubprocess":"Unnamed SubProcess","asFormat":"Export as {format}","untitledFile":"diagram"},"cli":{"noDiagrams":"No .bpmn files found in {paths}.","wrote":"wrote {file}","nothingWritten":"Nothing was written.","nothingChanged":"Nothing was changed.","notAGitRepository":"Not a git repository, so there is nothing to compare against.","header":{"status":"STATUS","endpoint":"ENDPOINT","files":"FILES","file":"FILE","details":"DETAILS","worker":"WORKER","name":"NAME","id":"ID","version":"VERSION","type":"TYPE","engine":"ENGINE","property":"PROPERTY","value":"VALUE","action":"ACTION","target":"TARGET","flow":"FLOW","testCases":"TEST CASES","testClass":"TEST CLASS","process":"PROCESS","scenarios":"SCENARIOS","severity":"SEVERITY","content":"CONTENT"},"trust":{"hookRefused":"hook {stage}: not run, because {root} is not a trusted project","notTrusted":"the project is not trusted, so penstock.yaml may not run shell commands here","runTrust":"run penstock trust once in this project to allow it, or pass --trust-project for this run only","questionNotTrusted":"{root} is not a trusted project.","questionPower":"penstock.yaml can run any shell command in this folder, with your own account.","questionAllow":"Allow it here and from now on? [y/N] ","questionInIt":"penstock.yaml in it may run any shell command in that folder, with your own account.","questionTrust":"Trust it on this machine? [y/N] ","once":"allowed for this run only, by --trust-project","saidNo":"No, so nothing from penstock.yaml was run.","nowTrusted":"penstock.yaml may run shell commands here now and from now on","trustedThere":"penstock.yaml may run shell commands there","nothingToTrust":"there is no penstock.yaml in it, so there is nothing to trust","nothingToTrustHint":"nothing was written. Run penstock init to write one, or penstock trust in the project folder","forgetHint":"penstock trust --forget takes an old record away","alreadyTrusted":"it is already trusted","notTrustedYet":"nothing was written, the project is still not trusted","noneTrusted":"No project is trusted on this machine.","headerProject":"TRUSTED PROJECT","headerSince":"SINCE","mayNotRun":"penstock.yaml may not run shell commands there now","notTrustedBefore":"it was not trusted"},"templates":{"noWorker":"No job worker was found: Penstock reads @JobWorker and @ExternalTaskSubscription in .java, .kt, .kts, .groovy and .scala files.","template":"TEMPLATE","workerIn":"{value} in {file}:{line}","workerInHandler":"{value} in {file}:{line}, handler {handler}","inputs":"INPUTS","action":{"written":"written","updated":"updated","unchanged":"unchanged"},"writtenFor":"Element templates for the job workers in this project, in .camunda/element-templates.","nothingToWrite":"Nothing to write: every template already says what the worker does.","summary":"{written} written, {updated} updated. Run the modeler or reload the editor to see them.","noneToCheck":"No element template in {folder}: nothing to check.","allMatch":"Every element template still matches the worker it was written from.","drifted":"{templates} no longer matches the worker:","asksFor":"asks for {name}, which the worker does not read","hasExtra":"has {name}, which the worker no longer reads","hasOtherType":"has {name} as a different type","fixHint":"Run penstock templates generate to bring them back in step.","usage":"Use templates generate to write the element templates, or templates --check to fail when one no longer matches its worker.","count":{"template":{"one":"{count} template","other":"{count} templates"},"elementTemplate":{"one":"{count} element template","other":"{count} element templates"},"operation":{"one":"{count} operation","other":"{count} operations"}},"headerDesktop":"DESKTOP MODELER","headerWeb":"WEB MODELER","loads":"loads","notLoaded":"not loaded","loadsSome":"{loaded} of {total}","diagnosed":"Element template files: {total} found, {loading} load in Camunda Desktop Modeler, {notLoading} do not.","warning":"warning: {reason}","api":{"found":"API description {title} ({format}): {operations}.","operation":"OPERATION","freePreview":"Free shows the first {shown} of {total} operations.","dryRun":"Dry run: nothing was written. Run it again with --write to write the templates into {directory}.","secrets":"Create these secrets in your connector runtime before the templates run: {names}.","written":"{created} created, {replaced} replaced in {directory}. Reload the modeler to see them.","notAFile":"{path} is not a file.","tooLarge":"{path} is larger than {megabytes} MB, which is more than a template is made from.","action":{"wouldCreate":"would create","wouldReplace":"would replace","created":"created","replaced":"replaced"},"format":{"openapi3":"OpenAPI 3","swagger2":"Swagger 2.0","postman":"Postman collection"},"badSecretPrefix":"--secret-prefix should be capital letters, digits and underscores, starting with a capital letter: {value}"}},"connectors":{"notInside":"Not a path inside the connectors directory: {path}","linkAt":"The connectors directory holds a link at {path}","holdsALink":"The connectors directory holds a link","fileInTheWay":"A file is in the way","tooLarge":"The file is larger than 64 MB","contentTooLarge":"The content is larger than 64 MB","directoryInTheWay":"A directory is in the way","nothingToMove":"Nothing to move","destinationExists":"The destination already exists","notACatalogueUrl":"Not a connector catalogue URL: {url}","githubUnreachable":"GitHub could not be reached","redirect":"GitHub answered with a redirect, which is not followed","responseTooLarge":"The response is larger than 64 MB","interrupted":"The download was interrupted","listOnly":"Only list may name the connectors directory itself","renameNeedsTarget":"Rename needs a destination","unknownOperation":"Unknown operation: {operation}","downloadFailed":"The connector templates could not be downloaded: {reason}.{when} run \`penstock connectors --refresh\` to try now.","unknownReason":"unknown reason","retriedAfter":" It is tried again automatically after {when};","usingOlder":"Using the templates downloaded for {ref}; checking for a newer release failed: {reason}","resolveUsage":"Usage: penstock connectors resolve <id> [version]","notAVersion":"Not a template version: {version}","idVersion":"{id} version {version}","noTemplate":"No template {which} in the catalogue for {ref}","cacheMissing":"The cached file for {id} is missing; run \`penstock connectors --refresh\`","summary":"Connector templates for {ref}: {current} current, {older} with older versions"},"update":{"npmFailed":"npm could not install {package}","noCli":"{package} did not contain the Penstock CLI","noWrapper":"No Penstock wrapper here or above. Run: penstock init","noLatest":"Could not find the latest {package}. Name a version: penstockw update 2.5.0","downloadFailed":"Could not download Penstock {version}: {reason}","alreadyPinned":"Penstock {version}, already the pinned version","moved":"Penstock {from} -> {to}","none":"(none)","downloaded":"downloaded {version} into {home}","alreadyDownloaded":"{version} was already downloaded","droppedDistribution":"dropped distribution={distribution}; it named {version}","commit":"Commit {scripts} and {properties}."},"license":{"notInteractive":"Signing in needs a terminal to answer in. In a pipeline, set PENSTOCK_LICENSE to your licence key instead.","codeOnItsWay":"A sign-in code is on its way to {email}.","codeQuestion":"Code from the e-mail: ","emailQuestion":"E-mail you bought Penstock with: ","nothingChangedAgain":"Nothing was changed. Run penstock license login to try again.","tooManyMachines":"Your {tier} licence is in use on {machines} machines, which is as many as it allows:","since":", since {when}","freeWhich":"Free which one for this machine? (number, or Enter to stop) ","noneBought":"There is no Penstock licence bought with {email}.","buyOrSignIn":"Buy one with penstock license buy, or sign in with the address you bought it with.","activeHere":"Penstock {tier} is active on this machine{again}. The editor in your IDE uses it too.","activeHerePlain":"Penstock {tier} is active on this machine.","again":" again","buyUsage":"penstock license buy [pro|team]","alreadyActive":"Penstock {tier} is already active on this machine.","checkoutOpen":"The checkout for Penstock {tier} is open in your browser:","waitingForPayment":"Waiting for the payment; this finishes by itself once it goes through.","paidEmailQuestion":"E-mail you paid with: ","paid":"Paid, thank you.","paymentFailed":"The payment did not go through, and nothing was charged. Run penstock license buy to try again.","checkoutExpired":"The checkout expired. Run penstock license buy to open a new one.","stoppedWaiting":"Stopped waiting. If you did pay, run penstock license login.","released":"The licence was released from this machine; it can be used on another.","cleared":"There was no seat on this machine to release; the licence file was cleared.","nothingToRelease":"There is no licence on this machine to release, or the licence service could not be reached.","trial":"There is no key yet: this machine is on the Pro trial, {left}, until {ends}.","running":"running","keyComesWithPurchase":"A key comes with a purchase: penstock license buy, or penstock license login if you bought Penstock already.","enterAKey":"To enter a key you have, run penstock license activate <key>.","noneOnThisMachine":"There is no licence on this machine{trial}. Sign in first: penstock license login","trialEnded":", and the Pro trial ended on {ends}","orBuyOne":"Or buy one: penstock license buy. To enter a key you have, run penstock license activate <key>.","teamOnly":"Only a Penstock Team key works in a pipeline, and the licence bought with that address is Pro.","buyTeam":"Buy Team with penstock license buy team.","keepKeySecret":"Keep a key secret. In a pipeline, set it as PENSTOCK_LICENSE; it takes no machine of its own and needs a Team key for the paid features.","activateUsage":"penstock license activate <key>, or sign in without a key: penstock license login","buyAndSignIn":"penstock license buy buy Pro penstock license login already bought","usage":"penstock license [status|key|activate <key>|deactivate]","serviceUnreachable":"The licence service could not be reached: {reason}","tierRow":"tier","statusRow":"status"},"drawing":{"unknownPathCommand":"path command {command} is not understood","incomplete":"the picture would be incomplete: {reason}","nothingToDraw":"the diagram has nothing to draw"},"bot":{"noRepository":"{names} is not set. The workflow that runs the bot has to run in a repository, and GITHUB_REPOSITORY is what names it.","noToken":"{names} is not set. The workflow token is the default: give the job issues: write and pull-requests: write. A token of your own goes in a secret PENSTOCK_TOKEN.","noEventPath":"{names} is not set. The workflow has to pass GITHUB_EVENT_PATH, or run the bot as an action.","noGitLabApi":"{names} is not set. GitLab sets it in every job; a run outside GitLab cannot answer a comment.","noGitLabToken":"{names} is not set. Add a CI/CD variable PENSTOCK_TOKEN: a project access token with role Developer and scope api (Settings, CI/CD, Variables).","noGitLabProject":"{names} is not set. The webhook payload carries the project id, and every GitLab job sets CI_PROJECT_ID.","noBitbucketRepo":"{names} is not set. The pipeline has to run on a pull request event, which sets it.","noBitbucketPr":"{names} is not set. The pipeline has to run on a pull request event, which sets it.","noBitbucketToken":"{names} is not set. Add a repository variable PENSTOCK_TOKEN: a repository access token with pull request write (Repository settings, Access tokens, Create token), and allow pipelines to use it.","noBitbucketBranch":"{names} is not set. The pull request event sets it.","noAzureCollection":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzureProject":"{names} is not set. The pipeline has to run in a project, which sets it.","noAzureRepository":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzurePullRequest":"{names} is not set. The pipeline has to run on a pull request, which sets it.","noAzureToken":"{names} is not set. Set SYSTEM_ACCESSTOKEN to $(System.AccessToken) and let the build contribute to pull requests (Project settings, Repositories, Security, allow scripts to access the OAuth token), or set a secret PENSTOCK_TOKEN.","noAzureBranch":"{names} is not set. The pull request event sets it.","notAGitCheckout":"The bot runs in a git checkout.","unknownCi":"This does not look like a CI run penstock knows: GitHub, Gitea, Forgejo, GitLab, Bitbucket or Azure DevOps.","nothingToAnswer":"Nothing to answer.","nothingDrawn":"Nothing was drawn, so there is nothing to post.","answeredOn":"answered on {platform}","refusedSaved":"said no, and saved it for the post stage","notForPenstock":"The comment was not for penstock.","couldNotCheckOut":"Could not check out {ref}.","baseNotFound":"Could not find the base {base}.","drew":"drew {file}","answerSaved":"saved the answer for the post stage","unknownStage":"Unknown stage: {stage}. Use draw or post.","count":{"element":{"one":"{count} element","other":"{count} elements"}},"elementsNotDrawn":"{elements} not drawn, the editor cannot draw them either - {ids}","theFork":"the fork {head}","aForkNoLongerExists":"a fork that no longer exists","fromAnotherFork":"This pull request comes from {head}, not from {base}, so the bot did not check it out and did not run anything from it. Push the branch to {base} and the bot will answer there.","noPictureBecause":"{file}: no picture, because {reason}. A picture that might be wrong is not shown.","picturesInArtifacts":"The pictures are in this build’s artifacts.","sayWhatToCompareWith":"Say what to compare with: \`/penstock diff <commit, branch or tag>\`.","couldNotFindRef":"I could not find \`{ref}\` in this repository.","diagramsChangedSince":"## Diagrams changed since \`{ref}\`","noDiagramChangedHere":"No diagram changed here.","cleanAgainstTheBaseline":"No problems. The drawing is clean against the baseline.","noDiagramToDraw":"No diagram to draw. Name one: \`/penstock image path/to/process.bpmn\`.","notInThisChange":"\`{file}\` is not in this change.","drawnButNotShown":"Drawn, but not shown here: {files}. [{open}]({link}).","openThem":"open them","couldNotDoThat":"I could not do that: {reason}","help":{"intro":"I read the diagrams in this change. Ask me in a comment:","report":"- \`/penstock\` - the full review: problems, what changed, pictures","check":"- \`/penstock check\` - only the problems","diff":"- \`/penstock diff <commit, branch or tag>\` - what changed since then, with the changes outlined","image":"- \`/penstock image [path.bpmn]\` - a picture of the diagram as it is now"}},"hook":{"exited":"exited {code}"},"hooks":{"skipped":"hooks - this is not a git repository","keptOther":"it already does something else","wrote":"formats and checks the diagrams a commit carries"},"doctor":{"buildEngine":"the build uses the {build} libraries, but penstock.yaml says {engine}","reachable":"reachable ({status})","answered":"answered {status}","unreachable":"unreachable - {reason}","noConfig":"none found - run: penstock init","noEngine":"not set - the editor cannot choose a palette without it","noProfiles":"(none)","missing":"missing: {path}","noUrl":"no url set","deployment":"{url} - {state}","variablesNeedPro":"{mode}, needs Penstock Pro","aiVerify":"repair attempts: {attempts}, stored receipts: {kept}, pipeline gate: {gate}","aiVerifyNeedsPro":"{summary}, needs Penstock Pro (Team in a pipeline)","on":"on","off":"off"},"export":{"unknownFormat":"Unknown export format: {format}. Use svg or png.","needsBrowser":"A PNG needs a browser to paint the SVG, which penstock does not carry. SVG needs nothing.","installBrowser":"Install it once, in the project or globally:","notDrawn":" not drawn, as in the editor: {element}"},"convert":{"targetMissing":"say what to convert to: --to operaton","unknownTarget":"--to takes operaton, the engine Camunda 7 and CIB seven diagrams convert to; it was {target}","unchanged":"already in the Operaton namespace, or not a Camunda 7 diagram","wouldChange":"would move the camunda: names to operaton: (pass --write to save)","changed":"moved the camunda: names to operaton:"},"fmt":{"alreadyFormatted":"already formatted","formattedXml":"formatted XML","wouldFormat":"would format XML (pass --write to save)","formLeftAlone":"a form is JSON and fmt rewrites XML only, so it is left as it is"},"create":{"shouldBe":"{where} should be {what}","anObject":"an object","aList":"a non-empty list","someText":"a non-empty text","oneOf":"one of {list}","entries":"a list of texts, one per column (columns: {count})","aName":"a name of letters, digits, underscore, dot and dash, starting with a letter or underscore","unique":"different from the other keys: {key} is used twice","onlyChoices":"given only for checklist, radio, select and taglist","trueOrFalse":"true or false","unknownKey":"{where} has no field {key}. It has {allowed}.","oneOfStepsOperations":"spec takes steps or operations, one of them","badExtension":"{file} should end in .bpmn, .dmn or .form","exists":"{file} already exists, and create_diagram never overwrites a file. Nothing was written.","noDescriptionForForms":"A form has no place for a description. Nothing was written."},"diff":{"baseNotFound":"Could not find the base {base}. Give a commit, branch or tag that is in this checkout.","noDifference":"No diagram differs from {base}.","baseIsPath":"{base} is a file, not a commit, branch or tag. To compare two files, give both as files: penstock diff <before> <after>.","newSince":"{file} - new since {base}","picture":"picture {file}","noPicture":"no picture: {reason}","before":"before {file}","after":"after {file}","noPictures":"no pictures: {reason}","added":"added","removed":"removed","changed":"changed","differentKinds":"{before} and {after} are not the same kind of file, so they cannot be compared.","onlyMoved":"Only the drawing moved ({elements}).","noDifferenceFound":"No difference.","movedOnCanvas":"and {elements} only moved on the canvas","count":{"element":{"one":"{count} element","other":"{count} elements"}}},"report":{"baseNotFound":"Could not find the base {base}. Give --base a commit, branch or tag that is in this checkout.","heading":"## Diagrams in this change","nothingChanged":"No diagram changed.","removed":"### Removed","check":"### Check","cleanAgainstTheBaseline":"Nothing new. The drawing is clean against the baseline.","whatChanged":"### What changed","newFile":"new","onlyTheDrawingMoved":"Only the drawing moved.","howItLooks":"### How it looks","thePicturesLink":"The pictures, with what changed outlined: [open them]({link}).","noPictures":"_No pictures this time._","outlined":"_What changed is outlined: green arrived, amber differs._"},"share":{"needsDiagram":"share needs a diagram: penstock share process.bpmn -o process.html","notADiagram":"{file} is not a .bpmn, .dmn or .form file, so there is nothing to share.","offline":"One file, opens offline in any browser; nothing in it reaches the network."},"import":{"needsFile":"import needs a file: penstock import diagram.drawio -o process.bpmn","missing":"{file} does not exist.","exists":"{file} already exists. Nothing was written; use -o for another name, or --force to replace it.","routes":"The routes of the connectors are as drawn; Auto Layout (Pro) can tidy them: penstock layout {file} --write","badFrom":"--from takes modeler, signavio, bizagi or flowable, not {from}.","badTo":"--to takes camunda7 or camunda8, not {to}.","folderNeedsModeler":"{file} is a folder. To read a Camunda Modeler project, use --from modeler.","notFolder":"{file} is not a folder that can be read.","uncFolder":"{file} is a network path, which is not read.","keymapWritten":"Wrote {file}: the Camunda Modeler keymap for VS Code. Merge it into your keybindings.json.","reportOnly":"Nothing was written.","outsideProject":"{file} is outside the project, so nothing was written."},"docs":{"format":"docs writes --format html (the default), md, docx or pdf.","pdfFont":"{file}: no font with these characters was found on this machine, so the PDF shows them as ?: {characters}","writtenSummary":"{pages} written{because}","count":{"step":{"one":"{count} step","other":"{count} steps"},"problem":{"one":"{count} problem","other":"{count} problems"},"page":{"one":"{count} page","other":"{count} pages"},"process":{"one":"{count} process","other":"{count} processes"},"decision":{"one":"{count} decision","other":"{count} decisions"},"form":{"one":"{count} form","other":"{count} forms"},"field":{"one":"{count} field","other":"{count} fields"}},"check":"Check","step":"Step","runs":"Runs","who":"Who","form":"Form","way":"Way","goesTo":"Goes to","when":"When","events":"Events","event":"Event","trigger":"Trigger","data":"Data","variable":"Variable","size":"Size","allDiagrams":"All diagrams","diagramsOf":"{project} diagrams","everyPathEnds":"Every path through the process reaches an end: no deadlocks, nothing runs twice, nothing is unreachable.","runsToItsEnd":"runs to its end","noTwoRulesMatch":"No two rules match the same input, and every input has a rule.","everyInputHasOneRule":"every input has one rule","everyFieldHasItsOwn":"every field has its own variable"},"migrate":{"apply":{"unknownWorkers":"Unknown worker language {value}; use one of {values}.","refused":"Nothing was written, because these files cannot be written safely:","nothing":"Nothing to apply: no Camunda 7 file is left to convert.","dryRun":"Dry run: nothing was written. This is what --write would change.","freePreview":"Free preview: the first {shown} of {total} elements. Writing and the whole diff are part of Penstock Pro.","wouldCreate":"would create {file}","skipped":"Skipped {file}: it {reason}","summaryWritten":"{rewritten} files rewritten, {created} created. {converted} elements converted, {manual} need a person, {review} to check.","summaryDry":"{rewritten} files would be rewritten, {created} created. {converted} elements converted, {manual} need a person, {review} to check.","verifyClean":"Checked as Camunda 8: nothing found.","verifyFound":"Checked as Camunda 8: {errors} errors, {warnings} warnings.","reportWritten":"MIGRATION.md lists what a person still has to do. Camunda 7 delegate classes were not touched.","runWrite":"Run the same command with --write to apply this."},"ready":"ready","converts":"converts","needsWork":"needs work","blocked":"blocked","unknownTarget":"Unknown target {target}. Camunda 8 versions Penstock converts for: {versions}.","baselineWritten":"wrote {file} with {findings}","nothingToMigrate":"There is nothing to migrate: no Camunda 7 diagram, decision or form was found.","toDo":"{count} to do","toCheck":"{count} to check","convert":"{count} convert","headerTodo":"TO DO","headerToCheck":"TO CHECK","headerConvert":"CONVERT","andMore":"and {count} more","totals":"{files} to migrate for Camunda {target}: {ready} ready, {converts} to convert, {needsWork} with work to do, {blocked} blocked.","newAndAccepted":"{fresh} new, {known} accepted","nothingNew":"nothing new, {known} accepted","instancesStay":"Running instances and history stay on Camunda 7 until they finish or are moved with the Data Migrator. penstock migrate report writes all of this as a page to hand on.","unreadable":"it could not be read","leftOpen":"{changes}, {open} left open","wouldWrite":"would write {file}: {reason}","staysOpen":"stays open:","alreadyThere":"{file} is already there and was not written over","left":"left: {where}: {title}. {action}","nothingToConvert":"There is nothing to convert: {reason}.","notCamunda7":{"one":"{files} is not Camunda 7","other":"{files} are not Camunda 7"},"noneFound":"no Camunda 7 diagram, decision or form was found","dryRunFolder":"The converted files would go into {folder}, with a penstock.yaml of their own that says engine: camunda-8. Pass --out <dir> to put them somewhere else.","configKept":"{file} is already there and was kept.","configWritten":"wrote {file} (engine: camunda-8), so the converted files open and are checked as Camunda 8. Set deployment.url to your Camunda 8 cluster.","camunda7Untouched":"The Camunda 7 files are untouched. Every job type above needs a job worker before anything runs. The IDE writes a skeleton from each delegate; running instances stay on Camunda 7.","count":{"finding":{"one":"{count} finding","other":"{count} findings"},"file":{"one":"{count} file","other":"{count} files"},"change":{"one":"{count} change","other":"{count} changes"}},"wouldConvert":"would convert","converted":"converted","plan":{"noSavedSelection":"There is no saved selection in .penstock/migration-selection.json.","columnId":"Change id","columnRisk":"Class","columnReason":"Reason","summary":"{accepted} of {total} changes accepted, about {hours} h of work left by hand.","saved":"Selection saved to .penstock/migration-selection.json."}},"init":{"licenceHint":"the bot, reports and baselines run on Penstock Team: put the key from \`penstock license key\` in {where}","teamHint":"with Penstock Team the pipeline also gets the review bot, SARIF annotations and baselines: \`penstock license buy team\`, then run init again","githubWorkflowToken":"the bot answers in pull requests with the workflow token; nothing to register","githubForks":"a pull request from a fork is not answered: the bot would have to run the fork with a token that can write to this repository","updateHint":"the workflow runs the Penstock action at a fixed commit, so the licence secret cannot reach code that changed later;","updateHow":"to move it on, look the commit up with \`gh api repos/kern0x1b/penstock-release/commits/main --jq .sha\` and change ACTION_REF in the CLI","secretLicence":"a secret PENSTOCK_LICENSE","giteaWorkflowToken":"the bot answers with the workflow token, or PENSTOCK_TOKEN when that is set","gitlabToken":"add a CI/CD variable PENSTOCK_TOKEN: a project access token, role Developer, scope api","gitlabWebhook":"to answer /penstock comments, add a webhook with Comments events pointing at","gitlabTriggerIsSecret":"that trigger token is a secret: anyone holding the URL can start pipelines on your project","gitlabKeepUrl":"keep the URL in the webhook settings only, never in a committed file, a comment or a shared link, and rotate it under Settings, Webhooks if it ever shows up in a job log","maskedLicence":"a masked CI/CD variable PENSTOCK_LICENSE","bitbucketToken":"add a repository variable PENSTOCK_TOKEN: a repository access token with pull request write","bitbucketTokenHow":"Repository settings, Access tokens, Create token, and allow pipelines to use it","securedLicence":"a secured repository variable PENSTOCK_LICENSE","azureContribute":"let the build service contribute to pull requests (Project settings → Repositories → Security)","azureToken":"the pipeline already sets SYSTEM_ACCESSTOKEN to $(System.AccessToken); without the setting above it stays empty","azurePolicy":"for Azure Repos, add this pipeline as a build validation branch policy","pipelineLicence":"a secret pipeline variable PENSTOCK_LICENSE","engine":{"camunda8":"Camunda 8","camunda7":"Camunda 7","operaton":"Operaton","cibSeven":"CIB seven","classic":"Classic BPMN, no engine","flowable":"Flowable","activiti":"Activiti"},"engineQuestion":"Which engine does this project run on?","numberQuestion":"Number [1]: ","gitignore":".gitignore with {entry}","unknownExample":"Unknown example: {example}. Use {names} or {last}.","folderNotEmpty":"{folder} is not empty. An example is written into an empty folder, so it never overwrites your files.","exampleReadme":"the README next to them says how to run it","unknownEngine":"Unknown engine: {engine}. Use {names} or {last}.","configWhatItIs":"What this project is. Commit it.","engineDoesNotFit":"The {example} example runs on {label}, so --engine {engine} does not fit it. Leave --engine out, or drop --example.","asTheExampleWroteIt":"as the example wrote it","alreadyAnswers":"it already answers for this project","engineNotUsed":"--engine {engine} was not used: {file} already says {says}","whatItRunsOn":"what the project runs on","includeFrom":"include it from .gitlab-ci.yml","mergeInto":"merge it into bitbucket-pipelines.yml","unknownCi":"Unknown CI: {ci}. Use github, gitea, forgejo, gitlab, bitbucket or azure."},"edit":{"editorRefused":"the editor refused: {reason}","operationFailed":"operation {number}: {message}","didNotReadBack":"The result did not read back cleanly, so it was not written.","changedWhileEditing":"The diagram changed while the edit was being made, so it was not written over.","nothingBroken":"ok nothing broken","breaksTheDrawing":"fail breaks the drawing: {problems}","readsLessWell":"note reads less well: {things}","element":"Id of the element, as show_diagram lists it.","dryRun":"\\\\nDry run: {file} was not changed.","wouldBreak":"\\\\n{file} was not changed: the edit would break the drawing. Pass --force to write it anyway.","mustLookLikePairs":"{where} \\"{entry}\\" must look like key=value","sayWhatToDo":"say what to do: add, connect, set or remove, or pass --ops with the operations as JSON","unknownField":"unknown field \\"{key}\\"; allowed: {allowed}","mustBeAString":"\\"{field}\\" must be a non-empty string","mustBeAStringShort":"\\"{key}\\" must be a string","propertiesMustBeAnObject":"\\"properties\\" must be an object","notAnEngineProperty":"\\"{key}\\" is not a {engine} property; allowed: {allowed}","mustBeABoolean":"\\"{key}\\" must be true or false","mustBeAWholeNumber":"\\"{key}\\" must be a whole number","mustMapNamesToStrings":"\\"{key}\\" must map names to strings","noOperations":"no operations given","mustBeAnObject":"must be an object","elementMustBeOneOf":"\\"element\\" must be one of {elements}","eventMustBeOneOf":"\\"event\\" must be one of {events}","eventOnlyForEvents":"\\"event\\" only applies to events","idMustBeValid":"\\"id\\" must be a valid XML id","opMustBeOneOf":"\\"op\\" must be add, connect, set, remove or move","property":{"name":"The label shown on the element.","documentation":"The documentation text of the element.","condition":"The condition expression of a sequence flow, such as \${approved}.","conditionSimple":"The condition expression of a sequence flow.","feelCondition":"The FEEL condition of a sequence flow, such as =approved.","class":"The Java class implementing the task.","delegateExpression":"An expression resolving to a delegate bean, such as \${reserveStock}.","expression":"An expression the task evaluates.","resultVariable":"Where the result of expression goes.","topic":"Makes the task an external task on this topic.","asyncBefore":"Starts a transaction before the element.","asyncAfter":"Starts a transaction after the element.","assignee":"Who the user task is assigned to.","candidateUsers":"Comma-separated users who may claim the task.","candidateGroups":"Comma-separated groups who may claim the task.","formKey":"The form the user task shows.","calledElement":"The process a call activity starts.","inputs":"Input parameters: name to value or expression.","outputs":"Output parameters: name to value or expression.","jobType":"The job type a worker subscribes to.","retries":"How often a failed job is retried.","formId":"The id of the linked form the user task shows.","processId":"The process a call activity starts.","inputMappings":"Input mappings: target variable to FEEL source.","outputMappings":"Output mappings: target variable to FEEL source.","decisionRef":"The decision a business rule task calls.","decisionId":"The id of the decision a business rule task calls.","async":"Runs the element as a separate job, in its own transaction.","skipExpression":"An expression that, when true, makes the engine skip the task."},"schema":{"title":"Penstock edit operations","titleFor":"Penstock edit operations for {engine}","onlyOn":" Only on {types}.","add":"Add an element after an existing one; it is placed and connected the way the editor does it.","after":"The id of the element the new one follows.","event":"For events: what kind of event.","newId":"The id to give it; by default the project convention decides.","connect":"Connect two elements with a sequence flow.","set":"Change properties of an element or a flow.","remove":"Remove an element and its connections.","move":"Move an element by dx and dy, in diagram units."},"noSuchElement":"there is no element \\"{id}\\"","set":"set {keys} on {id}","isTheRoot":"\\"{id}\\" is the diagram's root","removed":"removed {id}","isAConnection":"\\"{id}\\" is a connection; add after an element","afterEndEvent":"nothing can follow the end event \\"{id}\\"","addAfterAnElementInside":"\\"{id}\\" is a {type}; add after an element inside it","added":"added {type} {id} after {after}","idTaken":"the id \\"{id}\\" is already taken","noSequenceFlow":"a sequence flow cannot go from \\"{from}\\" to \\"{to}\\"","connect":"connect {from} -> {to} as {id}","doesNotApply":"\\"{key}\\" does not apply to {type} \\"{id}\\"","needsDiagram":"edit needs a diagram: penstock edit process.bpmn add service-task --after Task_check","isAFolder":"{from} is a folder, not a file of operations","notJson":"The operations in {from} are not JSON: {reason}","operationWhere":"operation {number}","count":{"newProblem":{"one":"{count} new problem","other":"{count} new problems"},"thing":{"one":"{count} thing","other":"{count} things"}},"mustBeANumber":"\\"{field}\\" must be a number","moved":"moved {id} by {dx}, {dy}"},"help":{"migrateApply":{"summary":"Rewrite the Camunda 7 BPMN, DMN and forms in place for Camunda 8, translate the expressions it can and list the ones it cannot, write a job worker skeleton for each job type and MIGRATION.md, then check the result as Camunda 8. Without --write it prints a unified diff and writes nothing; it never deletes a file and never follows a symbolic link out of the project.","licence":"Writing is part of Penstock Pro, and Team in a pipeline. The diff of the first 3 elements, and migrate analyze, are free.","exits":{"0":"0 nothing is left to convert, or the converted files check with no error","1":"1 the checked result has an error, a file could not be read, or nothing was written because a file changed","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"options":"Options","example":"Example","licence":"Licence","exitCodes":"Exit codes","option":{"migrateWrite":"with apply: write the changes; without it apply only prints the diff","migrateWorkers":"with apply: the job worker skeletons, spring (default), java, node or python","profile":"use this profile, as PENSTOCK_PROFILE would","migrateOnly":"with apply or plan: accept only these change ids, comma separated, from migrate plan","migrateExclude":"with apply or plan: leave these change ids out, comma separated","migrateSaved":"with apply or plan: use the selection saved in .penstock/migration-selection.json","migrateSaveSelection":"with plan: save the selection to .penstock/migration-selection.json","migrateScenarios":"with verify: run only the scenario files that match","migrateRunUnreviewed":"with verify: run even though the conversion adds executable content that you have not reviewed","migrateOriginalProfile":"with verify: the profile of the Camunda 7 test engine, the default profile without it","migrateConvertedProfile":"with verify: the profile of the Camunda 8 test engine"},"init":{"summary":"Write a penstock.yaml for this project: the engine it runs on, the rules, the profiles and the deployment. Asked in a terminal when the folder is empty and nothing says otherwise.","licence":"Free.","exits":{"0":"0 the file was written","1":"1 the folder could not be written, or the file is already there","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"engine":"camunda-8, camunda-7, operaton, cib-seven, flowable, activiti or classic","example":"camunda-8 or camunda-7, to write a small runnable project into an empty folder","ci":"github, gitea, gitlab, bitbucket or azure: write a pipeline for the tier this machine has","hooks":"install a pre-commit hook that formats and checks staged diagrams","profile":"use this profile, as PENSTOCK_PROFILE would"}},"doctor":{"summary":"Check the setup: which configuration layers are in force, which profiles, rules, element templates and engine.","licence":"Free.","exits":{"0":"0 the setup was read","1":"1 something in it could not be read, and the answer says what","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"json prints the configuration as it resolved, for a tool to read","profile":"use this profile, as PENSTOCK_PROFILE would"}},"check":{"summary":"Everything wrong with the diagrams, in sections: the drawing itself, the bpmnlint rules and, on Pro, how the processes, decisions and forms actually run. Case models (.cmmn) get the case checks.","licence":"Free. With these it is part of Penstock Pro, and Team in a pipeline:\\n --only flow flow analysis, the deadlocks and the branches that run twice\\n --baseline a baseline of findings that are already accepted\\n --format sarif|github the findings as annotations on the changed lines\\n --require-receipt fail when a change an agent made has no receipt","exits":{"0":"0 nothing was found, or everything found is in the baseline","1":"1 something was found that a person can act on","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"only":"which parts to run: drawing, rules, flow","format":"text, json, sarif or github; sarif and github are for a code review","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would","requireReceipt":"fail when a change an agent made has no valid receipt in .penstock/receipts; ai.verify.requireReceipt does it on every check","base":"the git ref the changes are counted from for --require-receipt; origin/main by default","ci":"check the policy pack as a pipeline does: the pin, any weakened rule or palette and the required checks; the pipeline name is only a label and may be left out; a CI environment variable does the same"}},"migrateAnalyze":{"summary":"Read the Camunda 7 diagrams and say what does not carry over to Camunda 8, and why.","licence":"Free. With these it is part of Penstock Pro, and Team in a pipeline:\\n --baseline a baseline of findings that are already accepted\\n --format sarif|github the findings as annotations on the changed lines","exits":{"0":"0 nothing would be lost, or everything lost is in the baseline","1":"1 something would be lost","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"migrateConvert":{"summary":"Write the Camunda 8 files into a camunda-8 folder next to the one given, with a penstock.yaml of their own. Nothing else in the project is touched.","licence":"The conversion is part of Penstock Pro, and Team in a pipeline. Reading it with migrate analyze, and the report, are free.","exits":{"0":"0 the files were written, or --dry-run found nothing to write","1":"1 something could not be converted, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"migrateReport":{"summary":"Write the migration report to hand on: what each diagram became, and what did not come across.","licence":"Free.","exits":{"0":"0 the report was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"}},"code":{"summary":"Check the diagrams against the code: job types, topics, classes and beans with nothing to run them, and workers no diagram uses.","licence":"Diagram and code checks are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 every worker and every reference lines up","1":"1 something does not, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the findings are reported","profile":"use this profile, as PENSTOCK_PROFILE would"}},"facts":{"summary":"Read a list of files on standard input, as {\\"files\\": [{\\"path\\": \\"...\\", \\"text\\": \\"...\\"}]}, and print the worker contracts they hold as JSON, for the editor to read the Python, Go, C# and Scala workers it cannot read itself.","licence":"Code links are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the contracts were printed","1":"1 the input is not a list of files","2":"2 the CLI itself failed, not the command; the message says what"}},"templatesGenerate":{"summary":"Write an element template for every job worker the project has, into .camunda/element-templates, so the Camunda palette fills itself in. Given an OpenAPI 3, Swagger 2.0 or Postman collection file instead of a folder, make one REST connector template per operation, with typed inputs, authentication from its security schemes as secrets placeholders, a result expression and error handling. From a file it prints what it would write and writes nothing without --write.","licence":"Writing element templates is part of Penstock Pro, and Team in a pipeline. The first 3 operations of an API description are previewed free.","exits":{"0":"0 every worker has a template, or the API description was read and the templates made","1":"1 a worker could not be written, the description could not be read, or a file was refused","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"check":"check instead of write: the same as templates check, and writes nothing","profile":"use this profile, as PENSTOCK_PROFILE would","format":"how the answer is printed; json is for a pipeline","out":"with an API description: where the templates are written, .camunda/element-templates of the project by default","write":"with an API description: write the templates; without it the answer is what would be written","secretPrefix":"with an API description: the namespace of the secret names the templates read, PENSTOCK_<API> by default; capitals, digits and underscores"}},"templatesCheck":{"summary":"List every element template file in the project, say whether Camunda Desktop Modeler and Web Modeler load it and the exact reason when one does not, then check that every template still says what its job worker asks for. Writes nothing.","licence":"Free.","exits":{"0":"0 every template file loads and still matches its worker","1":"1 a template does not load or has drifted, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"check":"what templates generate takes to do this instead of writing","profile":"use this profile, as PENSTOCK_PROFILE would","format":"how the answer is printed; json is for a pipeline"}},"scenariosList":{"summary":"List every distinct way through each process, with the conditions it takes. This is a test plan.","licence":"Process scenarios are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the scenarios were listed","1":"1 a process could not be read, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the scenarios are listed; md is a page a person reads","profile":"use this profile, as PENSTOCK_PROFILE would"}},"scenariosRun":{"summary":"Run the Camunda test-case files of the diagrams against the engine they name, step by step, with the mocks the file asks for.","licence":"Running a process against an engine is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"timeout":"how long one step may take, 30 by default","junitXml":"where a JUnit XML report is written","junit":"write a Camunda Process Test class that runs them instead","teamcity":"report as TeamCity service messages, as the IDE reads them","profile":"use this profile, as PENSTOCK_PROFILE would"}},"testCases":{"summary":"The command behind scenarios run and scenarios generate: run the Camunda test-case files of the diagrams against the engine they name, step by step, with the mocks the file asks for. --generate writes those files from the ways through each process instead.","licence":"Running a process against an engine, and writing its test-case files, is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"generate":"write the test-case files from the ways through each process, instead of running them","junit":"write a Camunda Process Test class that runs them instead","junitXml":"where a JUnit XML report is written","timeout":"how long one step may take, 30 by default","teamcity":"report as TeamCity service messages, as the IDE reads them"}},"scenariosGenerate":{"summary":"Write the Camunda test-case files from the ways through each process, which scenarios run then plays back against an engine.","licence":"Writing test-case files is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"timeout":"how long one step may take, 30 by default","junitXml":"where a JUnit XML report is written","teamcity":"report as TeamCity service messages, as the IDE reads them","profile":"use this profile, as PENSTOCK_PROFILE would"}},"junit":{"summary":"Write a JUnit test for every way through each process, with the variables that take it there, for Camunda Process Test or camunda-bpm-assert.","licence":"Process tests are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the tests were written","1":"1 a test could not be written, and the answer names the process","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"where the tests are written","package":"the package the tests are written in","profile":"use this profile, as PENSTOCK_PROFILE would"}},"layout":{"summary":"Lay the diagrams out as a readable left-to-right flow, whatever they were drawn like.","licence":"Auto layout is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the diagrams do not overlap and nothing runs through a shape","1":"1 a diagram could not be laid out, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"write":"save what was laid out; without it the answer is the plan and the file is untouched","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would"}},"convert":{"summary":"Move a Camunda 7 or CIB seven diagram to the Operaton namespace, so an Operaton project reads it. Without --write the answer is the list and the files are untouched.","licence":"Free.","exits":{"0":"0 every diagram is in the Operaton namespace, or was made so","1":"1 a file could not be read, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"to":"the engine the diagrams are converted to; operaton is the only one","write":"save the converted diagrams; without it nothing is written"}},"fmt":{"summary":"Rewrite the XML the way the editor saves it, so a diff of a diagram stays readable.","licence":"Free.","exits":{"0":"0 every file is already formatted, or was","1":"1 a file could not be parsed, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"write":"save the result; without it the answer is the diff and the file is untouched","profile":"use this profile, as PENSTOCK_PROFILE would"}},"diff":{"summary":"What changed between two versions of a process: two files, or what the working tree changed since a commit, a branch or a tag.","licence":"Free. The pictures with --images are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 nothing changed","1":"1 something did, and the answer lists it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"images":"render before and after, with the changes coloured","out":"where the pictures are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"export":{"summary":"Render the diagrams as pictures, one file per diagram. Case models (.cmmn) are drawn too.","licence":"Free.","exits":{"0":"0 every diagram was written","1":"1 a diagram could not be rendered, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"svg or png; the format the export is asked for","out":"where the pictures are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"share":{"summary":"One HTML file to send: a read-only viewer with zoom, pan and the documentation of each element. It opens offline, with nothing else on the page.","licence":"Free.","exits":{"0":"0 the file was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"the file to write; -o is the same","profile":"use this profile, as PENSTOCK_PROFILE would"}},"import":{"summary":"Turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN 2.0, and list what could not be mapped. A Camunda Modeler project folder is read with --from modeler.","licence":"Free.","exits":{"0":"0 the diagram was written","1":"1 something could not be mapped, and the answer says what","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"out":"the file to write; -o is the same; with --from modeler on a folder, the VS Code keymap file","force":"replace a file that is already there","format":"json reports what could not be mapped as a document a tool can read","profile":"use this profile, as PENSTOCK_PROFILE would","from":"the tool the file came from; the import refuses a file that is from another one, and modeler reads a project folder","to":"for Flowable: the Camunda version its extensions are converted to, camunda7 without it","report":"write nothing and say only what was converted, kept and could not be mapped","modelerData":"with --from modeler: the Camunda Modeler user data folder, instead of the usual one"}},"docs":{"summary":"Write documentation for every process, decision file and form: a page each, with the picture, the steps, the decisions, the events and the data.","licence":"Process documentation is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the pages were written","1":"1 a page could not be written, and the answer names it","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"html, md, docx or pdf","out":"where the pages are written","profile":"use this profile, as PENSTOCK_PROFILE would"}},"report":{"summary":"One markdown comment for a pull request: the check, the diff and a picture of every diagram that changed.","licence":"Pull request reports are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the report was written","1":"1 it could not be written, and the answer says where it tried","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"base":"what the report compares against, origin/main by default","out":"where the markdown is written","imagesDir":"where the pictures are written","imageBase":"where the pictures will be served from, for a comment that shows them","imagesLink":"where to find them instead, when they cannot be shown inline","profile":"use this profile, as PENSTOCK_PROFILE would"}},"bot":{"summary":"Answer in a pull or merge request, from the CI run it is in. penstock init --ci sets the pipeline up.","licence":"The review bot is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the answer was posted, or the pictures were drawn","1":"1 it could not be, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"stage":"draw the pictures now and post later, when they are uploaded between","profile":"use this profile, as PENSTOCK_PROFILE would"}},"deploy":{"summary":"Deploy the processes, decisions and forms to the engine the configuration names. With --only-changed, a resource whose normalised content equals the latest version on the engine is left out, so deploying the same diagram again makes no new version.","licence":"Free.","exits":{"0":"0 the engine took the deployment","1":"1 it did not, and the answer says what it said","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"dryRun":"say what would be sent, and send nothing","wait":"confirm with the engine that the definitions are live","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","profile":"use this profile, as PENSTOCK_PROFILE would","onlyChanged":"leave out what the engine already has, unchanged, and say so for each resource","confirm":"the name of a deployment marked protected, typed again","approveFile":"in a pipeline, the approval record a protected deployment needs"}},"show":{"summary":"List a diagram's elements, flows and properties, for a person or for a tool to read.","licence":"Free.","exits":{"0":"0 the diagram was read","1":"1 it is not a diagram, or not there, and the answer says which","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"json is the same document a tool reads","profile":"use this profile, as PENSTOCK_PROFILE would"}},"edit":{"summary":"Add, connect, set or remove in a diagram the way the editor would, and refuse an edit that would break it.","licence":"Editing from the command line is part of Penstock Pro, and Team in a pipeline. Reading the contract with --schema is free.","exits":{"0":"0 the diagram was changed, or --dry-run found nothing to change","1":"1 the edit would break the diagram, or could not be read, and nothing was written","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"ops":"the operations as JSON on one line","opsFile":"the operations as JSON in a file, or - to read them from standard input","schema":"print the contract the operations follow, and change nothing","after":"add after this element, the way the editor places a new one","event":"the event type to add","name":"the name of the element that is added, connected or set","id":"the id of the element to set or remove","condition":"the condition of a sequence flow that is connected","set":"an attribute to set, more than once","input":"an input mapping, more than once","output":"an output mapping, more than once","dryRun":"say what would change and write nothing","force":"write even when the edit would break the diagram","profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseStatus":{"summary":"Which licence this machine has, and why it is that one.","licence":"Free.","exits":{"0":"0 the answer was read","1":"1 the licence service could not be reached, and the machine stays as it was","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseKey":{"summary":"The key for PENSTOCK_LICENSE in a pipeline, found again by the e-mail you bought with, because the machine no longer keeps it.","licence":"Free.","exits":{"0":"0 the key was found","1":"1 there is no Team key bought with that address, or there is no terminal to ask on","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseBuy":{"summary":"Buy Penstock. The checkout opens in a browser and the licence reaches this machine by itself once you have paid.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 the payment did not go through, or nothing was charged","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseLogin":{"summary":"Sign in with the e-mail you bought Penstock with. There is no key to copy.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 there is no licence bought with that address","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseActivate":{"summary":"Use a key you already have.","licence":"Free.","exits":{"0":"0 the licence is on this machine","1":"1 the key was not accepted, and the answer says why","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"licenseLogout":{"summary":"Release this machine's licence so another machine can use it. The same as license deactivate.","licence":"Free.","exits":{"0":"0 the licence was released, or there was no seat to release","1":"1 the licence service could not be reached","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"profile":"use this profile, as PENSTOCK_PROFILE would"}},"trust":{"summary":"Let this project's penstock.yaml run shell commands here. A hook of check, layout or deploy asks for this first, and a project with no penstock.yaml is not trusted at all.","licence":"Free.","exits":{"0":"0 the project is trusted, forgotten, or the list was printed","1":"1 there is no penstock.yaml there to trust, or the path is not there","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"list":"print what is trusted on this machine","forget":"take one project back","yes":"do not ask, which is what a pipeline wants","profile":"use this profile, as PENSTOCK_PROFILE would"}},"mcp":{"summary":"Serve BPMN diagrams to an AI agent over MCP. Reading a diagram and checking it are free; flow analysis, scenarios, code links and editing need a licence.","licence":"list_diagrams, show_diagram and check_diagram are free. The others are part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the server stopped, or the client entry was printed","1":"1 a tool was asked for something this machine does not have","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"config":"print the client entry to paste into the agent, and stop","project":"the project every tool works on, without the agent naming it; nothing outside it is read"}},"connectors":{"summary":"List Camunda's connector templates, or where they are cached on this machine. Downloaded from GitHub at most once a day.","licence":"Free.","exits":{"0":"0 the list was printed","1":"1 the release list could not be downloaded, and the answer says when it will try again","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"refresh":"check GitHub for a newer release now","profile":"use this profile, as PENSTOCK_PROFILE would"}},"connectorsResolve":{"summary":"Print one connector template, resolved to the version asked for or to the newest one in the cache.","licence":"Free.","exits":{"0":"0 the template was printed","1":"1 there is no template with that id, and the answer says what there is","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"refresh":"check GitHub for a newer release first","profile":"use this profile, as PENSTOCK_PROFILE would"}},"update":{"summary":"Move the project's wrapper to a version, the latest by default.","licence":"Free.","exits":{"0":"0 the wrapper was moved","1":"1 it could not be, and the answer says which step refused","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"distribution":"where to get Penstock from: a tarball or a registry spec","profile":"use this profile, as PENSTOCK_PROFILE would"}},"web":{"summary":"Serve the editor in a browser, on this machine only. With a folder it opens that project; without one it starts on a welcome page where you choose the project in the browser. A key in the link keeps other pages and other users out, and nothing is sent anywhere.","licence":"Free. What needs Pro in an IDE needs it here too.","options":{"port":"the port to listen on, 8765 by default; the next free one is used when it is busy","host":"the address to listen on, 127.0.0.1 by default; any other makes the folder reachable from the network","noOpen":"print the link and do not open a browser"},"exits":{"0":"0 the server was stopped with Ctrl-C","1":"1 the folder is not there, the port or address is not usable, or no port was free","2":"2 the CLI itself failed, not the command; the message says what"}},"agentServe":{"summary":"Serve the AI chat of one project to the IDEs and editors that show it: its chats, their history and the agent behind them, over HTTP on 127.0.0.1 and nothing else. Every window of the project shares this one server. It prints one line of JSON with the port and a key, wants the key as a Bearer token on every request, and leaves a few seconds after no window is attached to it and no turn is running.","licence":"Free to start. Sending a message needs Pro on a developer machine, and Team in a pipeline.","options":{"project":"the project folder the chats belong to","detach":"start the server in its own session, print its line once it answers, and return; an IDE starts it this way so that a signal to its terminal does not stop the server for every window"},"exits":{"0":"0 stopped by a signal, or left a few seconds after no window was attached to it and no turn was running; a second server for a project that already has one waits until its standard input closes","1":"1 no project was given, the folder is not there, or the server could not listen","2":"2 the CLI itself failed, not the command; the message says what"}},"agent":{"summary":"Start an AI agent's own command line in this terminal with the penstock MCP server already set up for this one run. Nothing is written to the agent's own configuration or to the project. What follows -- goes to the agent as it is. Without a name it lists the agents and which are installed. An agent you added in the settings is started with its own command and arguments.","licence":"Free. The tools the agent gets keep their own licence: see penstock mcp --help.","options":{"project":"the project the penstock tools work on, and the folder the agent starts in; the current project by default"},"exits":{"0":"0 the agent ended normally, or the list was printed","1":"1 the agent is not installed or not known, or could not be started; any other code is the agent's own","2":"2 the CLI itself failed, not the command; the message says what"}},"testTask":{"summary":"Run one element of a diagram on the engine the project names. The process is deployed as a test build, an instance is started with the variables, the path to the element is completed or mocked, and the element is completed, made to throw an error or left waiting. Its variables, incidents and state are printed, and the build is removed afterwards.","licence":"Running a process against an engine is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the run finished with no failing case","1":"1 a case failed, or the engine could not be reached","2":"2 the CLI itself failed, not the command; the message says what","130":"130 Ctrl-C twice: the case is cancelled, its build removed, and the run stops"},"options":{"element":"the element to test","variables":"variables the instance starts with, over the ones the path needs","variablesFile":"the same variables, read from a JSON file","complete":"complete the element with these variables, which is the default with none","error":"make the element throw this BPMN error instead of completing","hold":"leave the element waiting, to see what it received","id":"which process, when the file holds more than one","timeout":"how long one step may take, 30 by default"}},"connections":{"summary":"Show the configuration around the diagrams: every secret and MCP client a diagram names, where the project defines it (connector-secrets, .env, Docker Compose, Helm values, Spring Boot properties, mcp-gateway.yaml), and what is missing, with the Camunda 8.7 property names that 8.8 renamed. Only names are printed, never values.","licence":"Free. With --against it is part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline","env":"look at one environment: the shared files and its own (.env.<name>, values-<name>.yaml, application-<name>.yaml, a profile of penstock.yaml)","against":"with --env: list what the other environment defines and this one lacks, before a deploy"},"exits":{"0":"0 nothing the runtime would fail on was found","1":"1 a diagram names something that is missing, an environment is unknown, or --against is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"incidentScenario":{"summary":"Read an incident of the engine (by its key, or the key of its instance) and write the scenario that reproduces it: it starts the process with the instance's variables, with anything that looks secret replaced by a placeholder, drives the path the instance took, and ends on an incident of the same type at the same element. The answer is the scenario, what it could not take from the engine, and with --run whether it reproduced.","licence":"Reading the incident and previewing the scenario is Free. With --write or --run it is part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline","write":"save the scenario next to the diagram's other scenarios; without it the answer is only what would be written","run":"run the scenario on the engine of the project and say whether it reproduced the incident; the engine has to be marked for tests"},"exits":{"0":"0 the incident was read and the scenario made, and with --run it reproduced","1":"1 the incident or its diagram could not be found, the file could not be written, the scenario did not reproduce it, or --write or --run is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"agents":{"summary":"List the Camunda 8 AI agents of the project: the model and provider, the limits and memory, each tool with the parameters the model fills in, the MCP clients the agent uses and whether their configuration is found, and what the agents rules found. Only names are printed, never values.","licence":"Free.","exits":{"0":"0 no agent has an error","1":"1 an agent has an error, or the folder does not exist","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the answer is printed; json is for a pipeline","agent":"make the scenario for this agent only","write":"save the scenarios next to the diagram's other scenarios; without it the answer is only what would be written"}},"agentsScenario":{"summary":"Make a scenario for the AI agents of a process, with the model answer stubbed: the agent job is completed with a canned answer and the scenario asserts that the agent completes and that no tool is run. For an agent sub-process it writes the COMPLETE_JOB_AD_HOC_SUB_PROCESS step that activates a tool, which Camunda Process Test runs and the Penstock runner does not. Without --write it only says what would be written.","licence":"Previewing the scenario is Free. With --write it is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the scenarios were made","1":"1 the diagram has no agent, cannot be read, the file could not be written, or --write is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how the answer is printed; json is for a pipeline","agent":"make the scenario for this agent only","write":"save the scenarios next to the diagram's other scenarios; without it the answer is only what would be written"}},"migrateAgents":{"exits":{"2":"2 the CLI itself failed, not the command; the message says what","0":"0 the migration was previewed or written","1":"1 nothing was written because a file changed or could not be replaced"},"summary":"Move the AI agent elements of the diagrams from the template versions of Camunda 8.9 and earlier to the 8.10 agent task and agent sub-process templates, using the migration rules the new templates declare. An element whose mapping cannot be proven is left untouched and listed with the reason. Without --write it prints what would change and writes nothing; files are replaced atomically and a symbolic link is never followed out of the project.","licence":"Writing is part of Penstock Pro, and Team in a pipeline. The first 3 elements of the preview, and penstock agents, are free.","options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is"}},"receiptVerify":{"summary":"Check a change to diagrams, decisions or forms without an agent: the files that changed against a git ref (HEAD unless --against), a diff in the diagram's own terms, the check before and after with the new findings named, and the saved scenarios run on the changed processes. The answer is a verdict: verified, has new findings, or not verified and why. Secret values and file contents are never put in it, only names, hashes and ids.","licence":"The verdict and the counts are Free. The full receipt, and --write, are part of Penstock Pro, and Team in a pipeline.","options":{"against":"the version to compare with; HEAD by default","write":"keep the receipt as a file in .penstock/receipts; without it nothing is written unless ai.verify.keepReceipts is true","format":"how the answer is printed; json is for a pipeline","runScenarios":"run the saved scenarios even when the change adds content that runs or touches the project configuration; without it they are not run then, because that content would be deployed to the test engine"},"exits":{"0":"0 the change is verified","1":"1 the change has new findings or could not be verified, a file could not be found, or --write is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"receiptCheck":{"summary":"Check a stored receipt against the files it names: the receipt must be a Penstock receipt, and each file must still hash to what the receipt recorded. It does not run the check again.","licence":"Stored receipts are part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the receipt is valid and every file matches it","1":"1 the receipt is not a receipt or cannot be found, or a file changed, is missing or should not exist","2":"2 the CLI itself failed, not the command; the message says what"}},"testDmn":{"summary":"Run the saved test cases of the decision tables in DMN files: each case gives the decision its inputs, compares the outputs with the expected ones and names the rules that matched. Cases live next to the file as <name>.dmn.tests.json. The rule coverage lists the rules no case reaches, counted for the hit policy of the table.","licence":"Running up to 3 cases per decision is Free. More cases, junit output, --min-rule-coverage and any run in a pipeline are part of Penstock Pro, and Team in a pipeline.","options":{"format":"how the answer is printed: text, json, or junit for a pipeline","minRuleCoverage":"fail when the rule coverage of the decision tables is below this percentage, from 0 to 100"},"exits":{"0":"0 every case passed and the coverage, when one was asked for, is met","1":"1 a case failed or could not be evaluated, a file could not be read, the coverage is below the minimum, or the run is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"}},"migratePlan":{"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"},"exits":{"2":"2 the CLI itself failed, not the command; the message says what","0":"0 the plan was listed","1":"1 the selection names an id that is not in the plan, or a file could not be read"},"summary":"List every change the conversion would make, per file and per element, with a stable id, the class it falls in (converted automatically, converted with a changed meaning, needs a person, left as is), the reason and an effort estimate. Writes nothing, except the selection when you ask for --save-selection.","licence":"Free."},"migrateVerify":{"options":{"format":"text, json, sarif or github","out":"where the report, or the converted files, are written","dryRun":"say what would be written and write nothing","target":"the Camunda 8 version to convert for, 8.8 by default","failOn":"what makes the exit code 1: error, or warning","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","verbose":"list and annotate what only carries over as it is","profile":"use this profile, as PENSTOCK_PROFILE would"},"exits":{"2":"2 something cannot be compared, or nothing was run because of a refusal","0":"0 every scenario is equivalent","1":"1 at least one scenario differs"},"summary":"Run the same scenarios on the original Camunda 7 diagram on one engine and on the converted Camunda 8 diagram on another, and say for each whether the observable trace, final state, variables and incidents are equivalent, differ (with the first point of divergence) or cannot be compared. Both engines must be marked deployment.forTests; shared and production engines are refused, and so is a conversion that adds executable content unless you confirm it with --run-unreviewed. Secret values are never copied into the answer.","licence":"Running is part of Penstock Pro, and Team in a pipeline. The first 3 scenarios are free."},"policy":{"summary":"Keep the rules, severities, conventions, palette, element templates and baselines of a team in one folder in git (.penstock/policy, or the folder policy: names in penstock.yaml, or a git address fetched only by sync), pinned by a hash of every file in it. show says what is active; init starts a pack; add-rule sets a rule and whether it is forced; pin writes the hash into penstock.yaml (or penstock.policy.lock); verify recomputes it; sync fetches policy: source into .penstock/policy-source, and nothing is fetched otherwise. A pack is data only: a plugin or a script in it is refused. penstock check then fails in a pipeline when the pin does not match, a forced rule is turned off or lowered, the palette is wider than the pack allows, or a required check did not run.","licence":"Reading and showing a pack is Free. Creating or changing one with init, add-rule, pin, verify and sync is part of Penstock Pro, and Team in a pipeline.","exits":{"0":"0 the pack was shown, written or verified","1":"1 the pack is missing, refused or does not match its pin, or the command is not allowed here","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"format":"how show prints the answer; json is for a pipeline","project":"the project the pack belongs to; the current folder by default","name":"with init: the name of the policy","severity":"with add-rule: error, warn or off","forced":"with add-rule: the project may not turn the rule off or lower it","source":"with sync: fetch this address instead of policy: source; an address you type here may also be a local folder","allowLocalSource":"with sync: accept a local folder named by policy: source in penstock.yaml; a network share is never accepted"}},"drift":{"summary":"Compare the processes and decisions in the project with what an environment of penstock.yaml has deployed: per resource in sync, local ahead, engine ahead (someone changed the engine and your file has not changed since the last deploy), differs (changed on both sides, or there is no deploy record to tell which), only local, or only on the engine. The content is compared after the same normalisation on both sides (whitespace, attribute order and the order of incoming and outgoing references do not count). The environment is a profile of penstock.yaml, or default. Forms are not read from an engine and are not compared. Names and hashes only, never a credential.","licence":"Free for one environment. With --against it is part of Penstock Pro, and Team in a pipeline.","options":{"env":"the environment to read; the one deploy would use by default","against":"also read this environment and compare the two with each other","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 everything is in sync","1":"1 something is not in sync, or two environments differ","2":"2 an environment could not be read: unknown, not set up, unreachable or credentials refused, or the CLI itself failed; the message says what"}},"promote":{"summary":"Take what is deployed and verified on one environment to another: the resources whose content on --from is exactly the local file, nothing else. The plan lists what would be created or updated, the secrets and MCP clients the target lacks (names only), whether the files fit the target engine version and its element templates, and the policy pack status. It is a dry run unless --write is given, and --write deploys only to an environment declared in penstock.yaml, to its own address. A target marked deployment.protected: true needs --confirm <its name>, and in a pipeline also --approve-file, an approval record (JSON: the environment, the hash of each file, approvedBy, approvedAt, validUntil) that is checked for all of that; it is a record kept in git and is not a signature or a cryptographic proof, so protect the folder that holds it. Policy enforcement and approvals in a pipeline are part of the Team plan.","licence":"Promoting, a dry run included, is part of Penstock Pro, and Team in a pipeline.","options":{"from":"the environment whose deployed content is promoted","to":"the environment to deploy to","dryRun":"plan only; this is the default","write":"deploy after the plan is clean","confirm":"the name of a protected target, typed again","approveFile":"in a pipeline, the approval record for a protected target","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the plan is clean, or the deployment was taken","1":"1 something blocks the promotion, and the answer says what","2":"2 an environment is unknown, not set up or could not be read, or the CLI itself failed; the message says what"}},"evidenceBuild":{"summary":"Assemble one reviewable package of the project for an audit: the diagrams as SVG, the Check results (SARIF and readable), the recorded scenario and DMN test results with coverage, the AI receipts (names and hashes only), with --since the changes since a git ref in diagram terms with the pictures, the connections findings (names only), the migration report if the project has one, and a file list with SHA-256, the tool version and the git commit and author. With the Team plan it also holds the policy pack identity and pin status and the declared environments. It never holds a secret value and never reads a file outside the project. evidence.json lists every file, and evidence.sha256 is the SHA-256 of evidence.json: an integrity checksum that shows the pack was changed afterwards, not a signature and not a legal attestation. A pack is a zip by default, or a folder with --format dir; an existing one is never replaced without --force.","licence":"Building a pack is part of Penstock Pro, and Team in a pipeline; the policy and environments sections are part of the Team plan. Verifying is Free.","options":{"out":"where the pack is written; a file name ending in .zip, or the folder of the pack; by default under .penstock of the project","format":"zip (the default) or dir for the container; json prints the answer as JSON","since":"add what changed since this ref, drawn in diagram terms","force":"replace a pack that is already there"},"exits":{"0":"0 the pack was written and verified","1":"1 the pack was refused (a limit, a diagram that cannot be drawn, a file that cannot be inspected, an existing pack) or the licence does not allow it; the message says why","2":"2 the CLI itself failed, not the command; the message says what"}},"evidenceVerify":{"summary":"Recompute the SHA-256 of every file of an evidence pack, a zip or a folder, and say which file was changed, is missing or was added since it was built. It refuses an entry that climbs out of the pack, an absolute path and a link, and it reads nothing outside the pack. The seal is an integrity checksum, not a signature: someone who can rewrite the whole pack can also write a new seal, so keep the pack where it cannot be rewritten.","licence":"Free.","options":{"format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 every file matches the manifest and the seal matches the manifest","1":"1 the pack was changed, is incomplete or cannot be read; the message says what","2":"2 the CLI itself failed, not the command; the message says what"}},"refactor":{"summary":"Rename a process variable, message, signal, error code, escalation, job type, topic, decision id, form key or process id (the called element of a call activity) across the BPMN, DMN and form files, the element templates, the application yaml and properties, the test cases and the code, and show every edit with its file, line and before and after, together with the places it refuses to touch and why (a script, a computed name, an expression it cannot read, a file it may not edit). It only previews unless --apply is given, and it writes nothing at all when anything is wrong: every file is written whole and atomically, only when it still reads as it did in the preview, and a failed write puts the files back. It refuses when the git tree has uncommitted changes, unless --force. A preview that lists refused places that matter needs --acknowledge to apply. bulk applies the renames of a mapping file in order, each on the result of the one before: a JSON file with a renames list of kind, from and to, or lines of kind,old,new. extract moves a subprocess, or a group of elements with one way in and one way out, into a new process file next to the diagram and replaces it with a call activity wired through variable mappings; it refuses with the reason when the selection has several entries or exits, a variable it cannot map, or anything that would not stay valid.","licence":"A single rename, with its preview, is Free, with no time limit. bulk and extract are part of Penstock Pro, and Team in a pipeline.","options":{"apply":"write the changes; without it only the preview is printed","force":"apply although the git tree has uncommitted changes","acknowledge":"apply although the preview lists places it refuses to touch, which stay as they are","name":"with extract: the name of the new process and of the call activity","project":"the project folder, the current folder by default","format":"how the answer is printed; json is for a pipeline"},"exits":{"0":"0 the preview was printed, or the changes were written","1":"1 the plan is blocked or refused (the message says why), the git tree is not clean, a file changed since the preview, or the licence does not allow it","2":"2 the CLI itself failed, not the command; the message says what"}},"lsp":{"summary":"Run a language server for BPMN, DMN, CMMN and Camunda Form files, so any editor that speaks the Language Server Protocol shows the check findings where they are, with hover, go to definition, references, symbols, quick fixes and completion. Free; it speaks over stdin and stdout only.","licence":"Free.","exits":{"0":"0 the editor shut the server down and asked it to exit","1":"1 the editor closed the connection first, or the command was started in a terminal or with a transport other than stdio","2":"2 the CLI itself failed, not the command; the message says what"},"options":{"stdio":"speak over stdin and stdout, the only transport there is; the editor starts the command and this is what it passes"}}},"usage":{"init":"write a penstock.yaml for this project; --engine camunda-8|camunda-7|operaton|cib-seven|flowable|activiti|classic says what it runs on\\n(asked in a terminal when the folder is empty); --ci and --hooks add the rest;\\n--example camunda-8|camunda-7|operaton|cib-seven|flowable|activiti writes a small runnable project into an empty folder","doctor":"check the setup: configuration layers, profiles, rules, templates, engine; --format json prints the configuration","check":"everything wrong with the diagrams, in sections: the drawing, the bpmnlint rules and,\\non Pro, how the processes, decisions and forms run; --only drawing,rules,flow for part of it","migrate":"Camunda 7 to Camunda 8: what does not carry over, the converted files, a report to hand on;\\nconvert needs Pro, and Team in a pipeline: it writes the Camunda 8 files into camunda-8 next to the folder, with a\\npenstock.yaml of their own, and touches nothing else; --target 8.5..8.9, --dry-run, --out <dir> for another folder\\napply rewrites the Camunda 7 files in place, as a diff first and with --write on Pro; --workers spring|java|node|python\\nplan lists every change with a stable id, class and reason; apply takes --only, --exclude and --saved to write just the accepted ones\\nverify runs the scenarios on a Camunda 7 and a Camunda 8 test engine and compares them (Pro)","code":"check the diagrams against the code: job types, topics, classes and beans with nothing to run them, workers no diagram uses","facts":"the worker contracts of the files on standard input, as JSON, for Python, Go, C# and Scala","templatesGenerate":"write an element template for every job worker the project has, into .camunda/element-templates;\\n--check writes nothing and exits 1 when a template's variables no longer match the worker\\nwith an OpenAPI, Swagger or Postman file instead of a folder, one REST connector template per operation:\\nprinted first, written with --write","scenariosList":"list every distinct way through each process, with the conditions it takes: a test plan; --format md|json","scenariosRun":"run the Camunda test-case files of the diagrams against their engine, step by step, with mocks;\\n--junit writes a Camunda Process Test class that runs them","scenariosGenerate":"write the test-case files from the ways through each process","testCases":"the command behind scenarios run and scenarios generate; --generate writes the test-case files instead of running them","junit":"write a JUnit test for every way through each process; --out <dir>, --package <name>","layout":"lay the diagrams out; --write to save","fmt":"rewrite the XML the way the editor saves it, so diffs stay readable","convert":"write the converted diagrams in the Operaton namespace, from Camunda 7 or CIB seven","diffTwoFiles":"what changed between two versions of a process","diffWorkingTree":"what the working tree changed since a commit, branch or tag, HEAD~1 by default; --images to see it","export":"render the diagrams as pictures; --format svg|png, --out <dir>","share":"one HTML file to send: a read-only viewer with zoom, pan and the documentation of each element, opens offline; -o <file.html>","import":"turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN 2.0, and list what could not be mapped; --from, --to, --report, -o <file.bpmn>, --force","docs":"write documentation for every process, decision file and form; --format html|md|docx|pdf, --out <dir>","report":"one markdown comment for a pull request: check, diff and pictures","bot":"answer in a pull or merge request, from the CI run it is in; init --ci sets it up","deploy":"deploy processes, decisions and forms to the engine the configuration names; --dry-run, --wait","show":"list a diagram's elements, flows and properties; --format json for tools","edit":"add, connect, set or remove, the way the editor would; --ops for JSON on one line,\\n--ops-file for JSON in a file or - to read it from standard input, --schema for the contract","license":"which licence this machine has, or - with the e-mail you bought with - the key for PENSTOCK_LICENSE in a pipeline","trust":"let this project's penstock.yaml run shell commands here: needed before a hook of check, layout or deploy runs;\\n--list prints what is trusted, --forget takes one away, --yes does not ask","licenseBuy":"buy Penstock; the licence arrives on this machine by itself","licenseLogin":"sign in with the e-mail you bought Penstock with; no key to copy","licenseActivate":"use a key you already have","licenseLogout":"release this machine's licence so another machine can use it (the same as license deactivate)","mcp":"serve BPMN diagrams to an AI agent over MCP: reading and checking are free;\\nflow analysis, scenarios, code links and editing need Pro, and Team in a pipeline;\\n--config prints the client entry","connectors":"list Camunda's connector templates, or print one; downloaded from GitHub at most once a day","update":"move the project's wrapper to a version, the latest by default","profile":"use this profile, as PENSTOCK_PROFILE would","lang":"answer in this language, en, ru, de, zh, ja, ko, es, pt-BR, fr, it, pl, nl, tr, uk, zh-TW, cs, id or vi;\\notherwise LANG, then LC_MESSAGES, then LC_ALL decide, and English is the answer","refresh":"with connectors: check GitHub for a newer release now","format":"how check, scenarios list, show and docs report themselves","only":"which parts of check to run: drawing, rules, flow","baseline":"fail only on findings the baseline does not already accept","updateBaseline":"write the current findings as the baseline","write":"let layout or fmt save its result","force":"let import replace a file that is already there","dryRun":"let deploy say what it would send, and send nothing","wait":"let deploy confirm with the engine that the definitions are live","ci":"which pipeline init should write","out":"where export puts pictures, or where report writes its markdown; -o is the same, and for share the file","base":"what report compares against; defaults to origin/main","imageBase":"where the pictures will be served from, for a comment that shows them","imagesLink":"where to find them instead, when they cannot be shown inline","images":"let diff render before and after, with the changes coloured","imagesDir":"where report puts its pictures","distribution":"for update: where to get Penstock from, a tarball or a registry spec","stage":"for bot: draw now and post later, when the pictures are uploaded between","target":"for migrate: the Camunda 8 version to convert for, 8.8 by default","failOn":"for migrate: what makes the exit code 1, error by default","verbose":"for migrate: list and annotate what only carries over as it is","hooks":"install a pre-commit hook that formats and checks staged diagrams","trustProject":"let this project's penstock.yaml run its hooks for this run, without writing anything down","teamcity":"let scenarios run report as TeamCity service messages, as the IDE reads them","junitXml":"where scenarios run writes a JUnit XML report","timeout":"how long scenarios run waits for one step, 30 by default","optionsHeading":"Options","pathsNote":"Paths default to the working directory, and the configuration is read from there upward, so it\\ndoes not matter which folder you run it in.","helpNote":"Every command and subcommand has its own help, with its options, an example, which tier it is and\\nwhat its exit codes mean: penstock <command> --help, as in penstock check --help or\\npenstock scenarios run --help.","guideNote":"The guide: {url}","web":"serve the editor in a browser, for the folder you give or for one you choose on its welcome page; --port, --host and --no-open say where and whether a browser opens","port":"the port penstock web listens on, 8765 by default; the next free one is used when it is busy","host":"the address penstock web listens on, 127.0.0.1 by default; any other makes the folder reachable from the network","noOpen":"penstock web: print the link and do not open a browser","agentServe":"serve the AI chat of one project to an IDE over HTTP on this machine; --project says which","agentLaunch":"start an agent's own command line here with the penstock MCP server set up for this run; without a name, list the agents","testTask":"run one task of a diagram on an engine: the path before it is completed or mocked, then its variables, incidents and state are reported","connections":"show the secrets and MCP clients the diagrams name, where the project defines them\\nand what is missing, with the 8.7 property names that 8.8 renamed;\\n--env looks at one environment, --env with --against compares two","env":"for connections: look at one environment, the shared files and the ones named for it","against":"for connections --env: what another environment defines and this one lacks (Pro)","incidentScenario":"turn an incident into a scenario that reproduces it;\\n--write saves it, --run runs it on the engine","agents":"list the AI agents: model, tools, limits, MCP clients, and what is wrong","agentsScenario":"make a scenario for an AI agent, with the model stubbed; --write on Pro","receiptVerify":"verify a change: new problems,\\nscenarios, a verdict","receiptCheck":"check a stored receipt\\nagainst the files","testDmn":"run the saved test cases of the decision tables in a DMN file or folder and report which rules they cover","policy":"keep your team’s rules, conventions, palette, templates and baselines in a pinned folder in git;\\nshow, init, add-rule, pin, verify, sync","drift":"Compare the project with what an environment has deployed.","promote":"Take what is verified on one environment to another, as a dry run unless --write.","evidenceBuild":"Build one reviewable audit package.","evidenceVerify":"Check that an evidence pack is unchanged.","lsp":"language server for editors over stdio: findings, hover, definitions, symbols, quick fixes and completion"},"renamed":"penstock {old} is now {now}; the old name goes in the next release.","flagRenamed":"{old} is now {now}; the old flag goes in the next release.","scenariosUsage":"Use scenarios list, scenarios run or scenarios generate.","mcpConfigHint":"Paste into your MCP client configuration, or in Claude Code run, once the command line is installed (npm install -g @kern0x1b/penstock-cli): claude mcp add penstock -- penstock mcp. VS Code needs neither, the Penstock extension registers the server. It finds the project from the files the agent asks about.","mcp":{"partOf":"{description} Part of Penstock Pro, and Team in a pipeline: {gives}.","nothing":"nothing","takesNot":"{tool} takes {list}, not {extra}","rootsNotSaid":"The client did not tell which folders are open, so no file can be placed inside them. Open a folder in the client and try again.","truncated":"The result was cut at {shown} of {total} characters. Ask for less: one process, or a smaller diagram.","needs":"{tool} needs {list}","mustBeTrueOrFalse":"{tool}: {name} must be true or false","noDirectory":"there is no directory {target}","notADirectory":"{target} is not a directory","projectMustBeAbsolute":"\\"project\\" must be an absolute path to a project folder","projectNotGiven":"\\"project\\" must be provided as an absolute path to a project folder","fileMustBeAbsolute":"\\"file\\" must be an absolute path to a diagram","noFile":"there is no file {file}","noElement":"{file} has no element {id}. It has {ids}.","notABpmnDiagram":"{file} is not a BPMN diagram","outsideRoots":"{target} is outside the workspace roots","notAPenstockProject":"{target} is not a Penstock project","notADiagram":"{file} is not a BPMN, DMN or form file","badRevision":"{ref} is not a git revision that can be used here","noCommittedVersion":"{file} has no committed version at {ref}, so there is nothing to compare it with","wouldReflow":"would reflow layout (dryRun, nothing written)","imageTooLarge":"The drawing is {size} characters long, too long to return here. Pass out, a folder, to write it there instead.","pngReturned":"{file} drawn as a PNG image.","onlyOneOf":"{tool} takes {first} or {second}, not both","mustBeOneOf":"{tool}: {name} must be one of {list}","mustBePositive":"{tool}: {name} must be a whole number above zero","outMustBeAbsolute":"\\"out\\" must be an absolute path to a folder","instructions":"Tools for BPMN diagrams, DMN decisions and Camunda forms across projects. Pass absolute paths to files or project folders. Read a diagram with show_diagram before changing it with edit_diagram. A tool that changes files also returns a receipt: what changed, the new problems and the scenarios that ran. If it lists new errors, fix them and call again.","unknownTool":"unknown tool: {name}","unknownPrompt":"unknown prompt: {name}","methodNotFound":"method not found: {method}","parseError":"parse error","notARequest":"that is not a JSON-RPC request: one request object per line, no arrays","tool":{"migrateApply":"Apply the Camunda 7 to Camunda 8 migration to a project: rewrite BPMN, DMN and forms in place, translate the expressions it can and list the ones it cannot, write a job worker skeleton for each job type and MIGRATION.md, then check the result as Camunda 8. By default it is a dry run that returns the diff and writes nothing; pass write true to write. It never deletes a file and never follows a symbolic link out of the project.","listDiagrams":"List the BPMN diagrams in a project, returning absolute paths.","showDiagram":"Describe a diagram: every element and flow with its id, type, name, connections and engine properties. Read this before editing; operations refer to these ids.","elementContext":"Say what surrounds one element of a diagram, as the editor's suggestions see it: the variables that reach it and which element writes each, what the element itself reads and writes, its job types, and the job types, processes and decisions the project already uses. Read it before naming a variable, a job type or a mapping, so that an existing name is reused instead of a new one invented. It is worked out from the diagrams alone, not from the code behind them.","checkDiagram":"Report what is wrong with a diagram, as the editor's check does: the drawing, the project's bpmnlint rules and, with a licence, how the process runs.","analyzeFlow":"Find what is wrong with how a diagram runs: deadlocks, branches that run twice, elements that can never run and loops with no way out, each with the path of element ids that leads there. Run it after edit_diagram.","listScenarios":"List every distinct way through a diagram: the decisions each takes, their conditions, the steps it runs and where it ends. Use it to write tests or to explain the process.","checkCodeLinks":"Check every diagram in the project against the code: job types, external task topics, classes and beans with nothing to run them, called processes no diagram defines, and workers no diagram uses, with file and line.","listDiagramsMore":"Each entry has the file and its kind (process, decision or form): DMN decision files and Camunda forms are listed too.","showDiagramMore":"For a DMN file it gives each decision with its hit policy, inputs, outputs, rules and the decisions, input data and knowledge it requires; for a Camunda form, its components with type, key and label.","elementContextMore":"For a DMN file the element is a decision id, and the answer is its table, the decisions that need it and the process elements that call it; for a form it is a component key or id, with the process elements that open the form.","checkDiagramMore":"A DMN file or a form is checked too: a DMN file that cannot be read and the form checks (duplicate or missing keys, repeated options) are free; gaps and overlaps between the rules of a decision table need a licence.","searchElements":"Find where a name is used across the project: elements, processes, messages, decisions and their outputs, variables with the elements that write and read them, and form fields. It matches the id or the name, ignoring case, exact matches first. Use it before inventing a name, and to see what a rename would touch.","diffDiagrams":"Say what changed between two diagrams of the same kind (BPMN, DMN or form), or between a file and its committed version (HEAD, unless ref names another): the elements added, removed and changed, and the ids of the elements that only moved on the canvas (or, in a form, were reordered or moved to another group). A decision table changes by rule id, a form by component id.","exportImage":"Draw a BPMN diagram as SVG (returned as text) or PNG (returned as an image; needs puppeteer installed). Pass out, a folder, to write the file there instead of returning it.","layoutDiagram":"Run the editor's auto layout on a diagram and write the result back in one atomic step. The elements and flows stay the same; only their positions change. Use dryRun to see which elements would move without writing.","runScenarios":"Run the project's saved test cases against a local Camunda engine that is marked for tests, and return which passed, failed or were skipped. Give a diagram as file, or a project folder. Each run deploys its own copy of the diagrams to the engine, removes it afterwards and keeps the trace under .penstock/runs.","editDiagram":"Change a diagram through the editor's own modelling: new elements are placed and connected the way the editor does it, and ids follow the project's conventions. The operations apply together or not at all. An edit that would break the drawing (overlapping shapes, a flow through a shape, a detached flow) is refused; crossings and the like are reported but allowed. Use dryRun to see the result without writing.","migrateAnalyze":"Analyse what moving Camunda 7 diagrams, decisions and forms to Camunda 8 would take, as penstock migrate does: for each file its status and findings (rule, severity, where, what to do, whether the conversion is automatic, to review or manual), then the effort and the blockers. Give a file or a project folder. Nothing is written.","createDiagram":"Create a new BPMN diagram, DMN decision or Camunda form at a path that does not exist yet, in one atomic step; an existing file is never overwritten. The extension (.bpmn, .dmn, .form) says which. Without spec the file is empty. With spec it is built from a description of its content and checked before it is written: a file that fails the check with an error is refused. BPMN: spec has steps (elements in a line after the start event, each with element, name and optionally event, id and properties) or operations (as in edit_diagram). DMN: spec has hitPolicy, inputs (label, expression, typeRef), outputs (name, label, typeRef) and rules (when and then, one text for each input and output). Form: spec has fields (type, key, label, options, required).","testTask":"Run one element of a diagram on the local Camunda engine the project marks for tests: the process is deployed as a test build, an instance is started with the variables, the path to the element is completed or mocked, then the element is completed, made to throw a BPMN error or left waiting. Returns the element's state, what it received and sent, the variables, the incidents and the instance state, and removes the build afterwards.","generateTemplates":"Make one REST connector element template per operation from an OpenAPI 3, Swagger 2.0 or Postman collection file: typed inputs from the parameters and request body, authentication from the security schemes as secrets placeholders, a result expression and error handling. Writes nothing unless write is true; the answer lists every template and whether it would be created or replaced. Writing never leaves the project or follows a symbolic link.","connections":"Show the secrets and MCP clients the diagrams and element templates of a project name, where the project's own files define them (connector-secrets, .env, Docker Compose, Helm values, Spring Boot properties, MCP client configuration), what is missing, and the Camunda 8.7 property names that 8.8 renamed. Reads only; the answer holds names and places, never values. With environment it looks at one environment; with against it also lists what the other environment defines and this one lacks, which is a Pro feature.","incidentToScenario":"Turn an incident of the project's engine into a scenario that reproduces it. Give the key of the incident or of its instance. The scenario starts the process with the instance's variables (anything that looks secret is replaced by a placeholder, and the names are listed), drives the path the instance took and ends on an incident of the same type at the same element. Reading and previewing is free and writes nothing. With write it saves the scenario next to the diagram's other scenarios; with run it also runs it on the engine of the project, which has to be marked for tests, and says whether it reproduced the incident; both are Pro. Writing never leaves the project or follows a symbolic link.","agents":"List the Camunda 8 AI agents of a project: for each, the model and provider, the prompts, the tools with the parameters the model fills in (fromAi), the limits, the memory, the MCP clients it uses with whether their configuration is found, the tool filters, and what the agents rules found. Only names are returned, never secret values.","migrateAgents":"Move the AI agent elements of a project from the Camunda 8.9 and earlier template versions to the 8.10 agent task and agent sub-process templates, using the migration rules the new templates declare. An element whose mapping cannot be proven is left untouched and listed with the reason. By default it is a dry run that previews the first 3 elements and writes nothing; pass write true to write, which is part of Penstock Pro. Files are replaced atomically and a symbolic link is never followed out of the project.","testDmn":"Run the saved test cases of the decision tables in a DMN file, or in every DMN file of the project: each case's inputs go to the decision, the outputs are compared with the expected ones, and the rules that matched are named. The answer also lists the rules no case covers, counted for each table's hit policy. Up to 3 cases per decision run for free; more are part of Penstock Pro. With case, the tool saves a new case next to the file (Penstock Pro), which changes a file.","migrateVerify":"Run the project’s scenarios against the original Camunda 7 diagram on one test engine and the converted Camunda 8 diagram on another, and report per scenario whether the observable behaviour is equivalent, differs or cannot be compared. Both engines must be marked for tests; it refuses anything else, and refuses when the conversion adds executable content. Runs locally, never sends anything elsewhere. Part of Penstock Pro.","drift":"Compare the project's diagrams and decisions with what an environment has deployed, after the same normalisation, and say per resource whether it is in sync, ahead locally, ahead on the engine, only local, only on the engine, or changed on both sides. Reads only: nothing is deployed or written, and only environments penstock.yaml declares are asked. With against it also compares two environments with each other, which is a Pro feature.","evidenceBuild":"Build an audit evidence pack of the project: the diagrams as SVG, the Check results, the recorded test results, the AI receipts (names and hashes only), what changed since a git ref, and a manifest with the SHA-256 of every file. It writes a zip or a folder inside the project and never holds a secret value. The seal is an integrity checksum, not a signature. Writes a file, so it needs Pro (Team in a pipeline).","importDiagram":"Import a diagram from another tool as BPMN 2.0: a draw.io, Visio, Signavio, Bizagi or Flowable file, or with from=modeler a Camunda Modeler project folder (a report of its templates, lint rules, settings, plugins and keymap). By default it only previews: it returns what was converted, kept and could not be mapped, and writes nothing. It writes only with write=true, a new file inside the project; an existing file is never replaced without force. Nothing in the imported file is ever run.","refactorRename":"Preview or apply the rename of a process variable, message, signal, error code, escalation, job type, topic, decision id, form key or process id across the BPMN, DMN, forms, element templates, configuration, tests and code of the project. Without apply it only returns the plan: every edit, and every place it refuses to touch with the reason. Applying needs the planId of that preview and refuses when the git tree has uncommitted changes unless force is true.","refactorBulk":"Preview or apply the renames of a mapping file in order, with the same plan, refusals and limits as refactor_rename.","refactorExtract":"Preview or apply moving a subprocess, or elements with one way in and one way out, into a new process file and replacing them with a call activity wired through variable mappings. It refuses, with the reason, when the selection is not safe to move."},"prompt":{"reviewDiagram":{"description":"Review a diagram: run the checks, read how it runs and report what to fix, most serious first.","text":"Review the diagram {file}. Read it with show_diagram, run check_diagram, and for a BPMN diagram analyze_flow too. Then list what is wrong, most serious first, each with the element ids involved and the change you suggest. Do not edit anything until I agree."},"explainProcess":{"description":"Explain a process in plain language for someone who has not seen it.","text":"Explain the process {file} in plain language for someone who has not seen it. Read it with show_diagram and list_scenarios, name the main path and each decision with what makes it go one way or the other, and say where it can end. Use the names on the diagram, and give element ids only when I ask."}},"param":{"workers":"Job worker skeleton language: spring (default), java, node or python.","write":"Write the changes. Default false: a dry run that returns the diff and writes nothing.","file":"Absolute path to the BPMN diagram.","project":"Absolute path to the project directory. When omitted, uses the workspace roots provided by the client.","anyFile":"Absolute path to a BPMN, DMN or Camunda form file.","query":"Text to look for in ids and names.","kinds":"Only look for these kinds. When omitted, all of them.","limit":"Most results to return. Default 50.","other":"Absolute path to the second BPMN diagram. When omitted, the diagram is compared with its committed version.","ref":"Git revision to compare with when other is omitted. Default HEAD.","format":"svg (default) or png.","out":"Absolute path to a folder to write the image to. When omitted, the image is returned.","timeout":"Seconds one step of a test case may take before it fails.","dryRun":"Report what would change without writing the file.","element":"Id of the element to test.","variables":"Variables the instance starts with. They win over the values the path needs.","complete":"Variables to complete the element with. This is the default, with none.","error":"BPMN error code the element throws instead of completing.","target":"Camunda 8 version to analyse for. Default 8.8.","verbose":"Include the findings that only note what carries over.","newFile":"Absolute path of the file to create, ending in .bpmn, .dmn or .form. It must not exist.","diagramName":"Name of the process, decision or form. Default: the file name.","diagramDescription":"What the process or decision is for, stored as its documentation. Not available for forms.","spec":"The content to build, as the tool description says.","hold":"Leave the element waiting, to see what it received.","process":"Id of the process, when the file holds more than one.","apiSpec":"The absolute path of the API description file: OpenAPI 3 or Swagger 2.0 in JSON or YAML, or a Postman collection in JSON.","templatesOut":"The absolute path of the folder to write the templates into. By default .camunda/element-templates of the project. It has to be inside the project.","environment":"Look at one environment: the shared files and the ones named for it (.env.<name>, values-<name>.yaml, application-<name>.yaml, a profile of penstock.yaml).","against":"With environment: the environment to compare with. Lists what it defines and the environment lacks. Pro, and Team in a pipeline.","secretPrefix":"The namespace of the secret names the templates read, capitals, digits and underscores starting with a capital. By default PENSTOCK_ and a slug of the API title.","incidentKey":"The key of the incident, or of the process instance it belongs to","incidentWrite":"Save the scenario next to the diagram's other scenarios (Pro). Default false: a preview that writes nothing.","incidentRun":"Run the scenario on the engine of the project, which has to be marked for tests, and say whether it reproduced the incident (Pro). Default false.","scenarios":"Run the saved scenarios on the changed processes after the change. Only on an engine marked deployment.forTests, and not when the change adds content that runs. Off by default.","dmnCase":"A case to save next to the DMN file: name, decision, inputs, expected and, optionally, rules (the numbers of the rules that must be applied). Needs file. Part of Penstock Pro.","migrateOnly":"Change ids to apply, from migrate plan; only these are written. Optional.","migrateExclude":"Change ids to leave out, from migrate plan. Optional.","verifyScenarios":"A glob that limits which scenario files run, for example flows/**/*.cases.json. Optional.","verifyOriginalProfile":"The penstock.yaml profile of the Camunda 7 (or Operaton, CIB seven) test engine. Optional; the default profile is used without it.","verifyConvertedProfile":"The penstock.yaml profile of the Camunda 8 test engine that runs the converted diagram.","driftEnvironment":"The environment to read: a profile of penstock.yaml that sets its own deployment.url. Defaults to the active profile or the plain deployment section.","driftAgainst":"A second environment to compare the first one with. Pro, and Team in a pipeline.","evidenceOut":"Where to write the pack, inside the project: a file name ending in .zip, or a folder. Defaults to .penstock/penstock-evidence.zip.","evidenceSince":"A git ref; the pack then also holds what changed since it, drawn in diagram terms.","evidenceFormat":"zip (the default) or dir.","evidenceForce":"Replace a pack that is already there.","importFile":"Absolute path to the file to import, or to the Camunda Modeler project folder.","importFrom":"The tool the file came from: modeler, signavio, bizagi or flowable. The import refuses a file that came from another tool. With modeler on a folder it reads the Camunda Modeler project.","importTo":"For Flowable: camunda7 (default) or camunda8, the Camunda version its extensions are converted to.","importWrite":"Write the BPMN file. Default false: a preview that writes nothing.","importOut":"Where to write, relative to the project root; it must stay inside the project. Default: beside the imported file.","importForce":"Replace the file at out if it exists. Default false.","refactorKind":"What is renamed","refactorFrom":"The current name","refactorTo":"The new name","refactorApply":"Write the changes. Without it only the plan is returned","refactorPlanId":"The planId of the preview of this same request; required with apply","refactorAcknowledge":"Apply although the plan lists refused places, which stay as they are","refactorForce":"Apply although the git tree has uncommitted changes","refactorMapping":"Path of the mapping file inside the project: JSON with a renames list, or lines of kind,old,new","refactorFile":"Path of the BPMN file inside the project","refactorElements":"Ids of the subprocess, or of the elements to move","refactorProcessId":"The id of the new process, which is also the name of its file","refactorName":"The name of the new process and of the call activity"},"mustBeText":"{tool}: {name} must be a non-empty text","mustBeObject":"{tool}: {name} must be an object","oneProject":"{tool} works on one project at a time. Give project.","mustBeTextList":"{tool}: {name} must be a list of non-empty texts (at most 20000, each at most 1024 characters)"},"checkUnknownSection":"check does not have a {section} section. It has {sections}.","badFailOn":"--fail-on should be error or warning, not {value}.","badTimeout":"The timeout should be a number of seconds.","badFormat":"--format should be {values}, not {value}.","preHookStopped":"The {stage} stage was stopped by its pre hook.","postHookStopped":"The {stage} stage was stopped by its post hook.","unknownCommand":"Unknown command: {command}","stopping":"Stopping: the running test case is cancelled and its build removed. Press Ctrl-C again to leave now.","show":{"needsDiagram":"show needs a diagram: penstock show process.bpmn"},"facts":{"badInput":"facts reads a JSON list of files, each with its path and its text, on standard input"},"web":{"serving":"Serving {folder}","pressCtrlC":"Press Ctrl+C to stop.","stopping":"Stopping.","notAFolder":"{folder} is not a folder.","badPort":"The port should be a number from 0 to 65535, not \\"{value}\\".","badHost":"The address should be an IP address or a host name, not \\"{value}\\".","noFreePort":"No port from {from} to {to} is free.","cannotListen":"Penstock is unable to listen: {reason}","portTaken":"Port {port} is in use, so Penstock uses {used}.","exposed":"Warning: --host {host} makes this machine reachable from other machines. Anyone with the link below can read and change the diagrams of the open project, and see the folder names on this machine.","noPageWarning":"The editor page is not part of this build, so only the API answers. Build the webview, or set PENSTOCK_WEB_ROOT to a built page.","noPage":"The editor page is not part of this installation.","browserFailed":"Penstock is unable to open a browser. Open the link above yourself.","reason":{"internal":"The server is unable to do that.","noSuchFile":"There is no such file.","noAccess":"The server is not allowed to do that.","isAFolder":"That is a folder, not a file.","diskFull":"The disk is full.","exists":"That already exists.","badPath":"{path} should be a path inside the folder.","outside":"{path} is outside the folder Penstock is serving.","notEditable":"Penstock writes only diagrams, decisions, forms, test cases, penstock.yaml and element templates, and {path} is none of them.","tooLarge":"The request should be under {limit} MB.","fileTooLarge":"The file should be under {limit} MB.","notAnObject":"The request should be a JSON object.","missingField":"The request should have a {field}.","wrongField":"The request has an incorrect {field}.","notJson":"The request body should be JSON, sent as application/json.","wrongHost":"This is not an address Penstock answers on.","wrongOrigin":"This request comes from another page, and Penstock answers only its own page.","noToken":"Open the link that penstock web printed: it carries the key this server needs.","methodNotAllowed":"That operation does not take this method.","noSuchOperation":"There is no such operation.","tooLong":"The address of the request is too long.","tookTooLong":"The request took too long.","notTheProject":"{path} is not the folder Penstock is serving.","badFileList":"The request should list between 1 and 500 files.","listedTwice":"{path} is listed twice.","alreadyExists":"{path} already exists.","badTraceName":"The run and the trace name should be lower case letters, digits and hyphens.","unknownFeature":"{feature} is not a feature Penstock knows.","tooMany":"The request has too many entries.","badProfile":"A profile name should be letters, digits, spaces, dots, hyphens or underscores, up to 80 characters.","notAnAddress":"The {field} should be an http or https address.","badEnginePath":"The engine is asked for paths on its own API only, with GET, POST, PUT, PATCH or DELETE.","tooManyHooks":"Too many deployment hooks are running.","noSuchRun":"There is no such hook run.","notWebAddress":"{url} is not a web address.","connectorRefused":"The connector catalogue refused that: {detail}","engineAnswerTooLarge":"The engine's answer should be under {limit} MB.","projectGone":"The folder of this project is no longer there.","noProject":"No project is open. Open one first.","projectChanged":"The server is serving another project now. Reload the page to follow it.","switchBusy":"A deployment is running. Wait for it to finish before opening another project.","badFolder":"{folder} should be the path of a folder.","notAbsolute":"{folder} should be an absolute path, such as /home/me/project or C:\\\\Projects\\\\app.","noSuchFolder":"{folder} does not exist.","notAFolder":"{folder} is a file, not a folder.","folderNotReadable":"Penstock is not allowed to read {folder}.","nameEmpty":"The name should not be empty.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > | or control characters.","nameDots":"The name should not start or end with a space, or end with a dot.","nameReserved":"{name} is a name that Windows reserves.","nameLong":"The name should be at most 255 bytes.","notTheRoot":"The project folder itself cannot be changed here.","isALink":"{path} is a symbolic link, and Penstock does not change links.","changedOnDisk":"{path} changed on disk since the page last read it.","kindChange":"{path} should keep the type of file it has.","moveIntoItself":"A folder cannot be moved into itself.","tooDeep":"The folder is nested too deeply.","folderHoldsOthers":"{path} holds files that Penstock does not edit, so it is not deleted.","archiveTooLarge":"The project has more than {files} files or more than {size} GB, which is too much for one download.","busy":"The file is in use by another program.","readOnly":"The disk is read-only.","otherDisk":"Penstock does not move files between disks.","noLanguageServer":"There is no language server named {server}.","languageServerMissing":"The language server command {command} is not installed on this machine.","languageServerUnsafe":"The language server {command} is a Windows command file that cannot be started with these arguments.","tooManyLanguageServers":"No more than {limit} language servers should run at once.","staleToolWindow":"The tool window changed since it was read. Reload the tree and try again.","noSuchAction":"That action is not in the tool window. Reload the tree and try again."},"unsupported":{"script":"Script files open in an IDE editor, which the browser editor does not have.","diff":"A version control diff is shown by an IDE.","clipboard":"The clipboard belongs to the browser.","chooser":"Files are chosen in the page, not in a system dialog.","navigation":"Opening code needs an IDE. Use Penstock in a JetBrains IDE or VS Code to jump to it.","view":"Tool windows belong to an IDE.","reveal":"The page opens diagrams itself.","tests":"Running tests from code needs an IDE. Run penstock scenarios run on the command line.","rename":"Renaming linked names across code needs an IDE.","confirm":"Confirmations are asked in the page itself.","migration":"The conversion preview is not in the browser editor. Run penstock migrate on the command line.","document":"The browser editor saves through the file operations and keeps its own undo history."},"page":{"expired":{"title":"This link does not open Penstock","text":"Its key is missing or no longer valid. Penstock may have been restarted since the link was made.","hint":"Use the link that penstock web printed in the terminal, or run penstock web again."},"missing":{"title":"There is no such page","text":"Penstock has no page at this address.","hint":"Go back to the editor with the link that penstock web printed."},"open":"Open the editor"},"servingWelcome":"No project is open yet. Choose one in the browser.","toolWindow":{"unsupported":{"outside":"That file is outside the project Penstock is serving.","tests":"Running tests from code needs an IDE. Run the scenarios in the diagram's Scenarios tab, or run penstock scenarios run on the command line.","migration":"Converting to Camunda 8 is not in the browser editor yet. Run penstock migrate analyze, convert or report on the command line.","templates":"Writing workers and element templates from the tool window is not in the browser editor yet. Run penstock templates generate on the command line."},"script":{"missing":"The diagram no longer has this script."}}},"webHost":{"reason":{"notLicensed":"Renaming linked names needs a Pro licence.","changedSince":"{file} changed after the rename was planned. Nothing was written.","licence":"The key was not accepted: {detail}","licenceService":"The licence service could not be reached: {detail}","keyShape":"The licence key looks incomplete. Paste it as it came in the purchase email.","nothingToRelease":"There is no activated licence on this machine to give back."}},"agentServe":{"needsProject":"Say which project the chats are for: penstock agent serve --project <dir>."},"agentLaunch":{"heading":"Agents that penstock agent <name> can start:","how":"Start one with: penstock agent <name> [-- <arguments for the agent>]","installed":"installed","missing":"not installed - {install}","notFound":"its command is not on this machine","unknown":"There is no agent called {agent}. Choose one of: {list}.","notInstalled":"{name} is not installed on this machine. Install it with: {install}","commandMissing":"The command of {name}, {command}, is not on this machine.","noMcp":"Penstock could not tell how to start its own MCP server from here, so the agent was not started.","customNote":"{name} is an agent you added, so it gets the penstock MCP server as JSON in the environment variable PENSTOCK_MCP_CONFIG.","cannotPrepare":"The agent was not started because its settings for this run could not be written: {reason}","cannotStart":"{name} could not be started: {reason}","unsafeArguments":"{name} is a Windows command file, and its arguments cannot be passed to a command file safely, so it was not started.","extraWords":"Put what is meant for the agent after --, for example: penstock agent {agent} -- <arguments>."},"start":{"npmMissing":"Penstock needs Node.js with npm to run its command line.","unpublished":"npm has no Penstock command line for this version, so the command did not start.","installFailed":"The Penstock command line could not be installed. Check your network or npm registry and try again.","notStarted":"The Penstock command line could not be started.","details":"Details","progress":"Starting the Penstock command line"},"test":{"notAnObject":"it must be an object such as {\\"order\\": \\"A-1\\"}"},"connections":{"title":"Connections in {folder}","titleIn":"Connections in {folder}, environment {environment}","environments":"Environments: {list}","noEnvironments":"Environments: none found (name them with .env.<name>, values-<name>.yaml, application-<name>.yaml or profiles in penstock.yaml)","nothingReferenced":"No diagram refers to a secret or an MCP client.","secrets":"Secrets","clients":"MCP clients","noSources":"No file that could supply secrets was found, so they are not checked: a secret that lives in a cloud console or a vault cannot be seen from here.","noClientSources":"No MCP client configuration was found, so the client ids are not checked.","opaque":"Also read from {from}, whose names cannot be seen ({place})","unused":"Defined and not used by any diagram","reconcile":"{target} compared with {against}","nothingMissing":"Nothing is missing in {target}.","missingHeading":"Defined for {against} and missing in {target}:","onlyHeading":"Only in {target}:","usedByDiagram":"used by a diagram","findings":"Findings: {count}","againstNeedsEnvironment":"--against compares with an environment chosen by --env; give --env <name> as well.","unknownEnvironment":"There is no environment named {environment}. Known environments: {known}.","noEnvironmentsKnown":"There is no environment named {environment}, and the project has none.","header":{"name":"NAME","status":"STATUS","usedIn":"USED IN","definedIn":"DEFINED IN"},"status":{"defined":"defined","undefined":"missing","unverifiable":"not checked"},"count":{"file":{"one":"{count} configuration file read","other":"{count} configuration files read"}}},"incident":{"needsKey":"Say which incident: penstock incident scenario <instanceKey|incidentKey>.","unknownAction":"There is no incident command {action}. Try penstock incident scenario.","found":"Incident {type} at {element} of {process}, instance {instance}.","message":"Message: {message}","scenario":"Scenario: {name}","notes":"Notes:","dryRun":"Nothing written. Add --write to save the scenario to {file}.","written":"Written to {file}.","exists":"{file} already has this scenario.","reproduced":"Reproduced: running the scenario raised the same incident.","notReproduced":"Did not reproduce: {reason}","notRun":"Not run: {reason}"},"agents":{"title":"AI agents in {folder}","none":"No AI agent was found in the diagrams.","kindTask":"task","kindSubprocess":"sub-process","limits":"Limits: model calls {calls}","memory":"Memory: {storage}, context window {window}","unset":"not set","noTools":"No tools","tools":"Tools: {count}","clients":"MCP clients","orphan":"Tool container {id} in {file} has no agent that uses it","standalone":"MCP client {client} in {file} is not used by an agent","count":{"agent":{"one":"{count} AI agent","other":"{count} AI agents"}},"scenarioNeedsFile":"Name the diagram file: penstock agents scenario <file>","scenario":"Scenario: {name}","scenarioSkipped":"No scenario for the agent {agent}","scenarioExists":"Already in {file}; nothing to add.","scenarioWritten":"Wrote {file}.","scenarioDryRun":"Nothing written. Run again with --write to add it to {file}.","migrate":{"change":{"moved":"{from} moved to {target}","set":"{target} set","added":"{target} added","kept-default":"{target} keeps the template default","remapped":"{target} value mapped to the new template"},"element":"{file}: {id} template version {from} -> {to}","nothing":"No AI agent element needs migrating.","dryRun":"Dry run: nothing is written.","freePreview":"Free preview: the first {shown} of {total} elements. Writing and the whole list are part of Penstock Pro.","untouched":"Left untouched, because the mapping cannot be proven:","summaryWritten":"Migrated {migrated}, left untouched {untouched}.","summaryDry":"Would migrate {migrated}, leave untouched {untouched}.","runWrite":"Run again with --write to apply it (Penstock Pro)."}},"receipt":{"usage":"Use receipt verify <file...> to check a change, or receipt check <receipt.json> to check a stored receipt.","needsFiles":"Name the files to verify: penstock receipt verify <file...> [--against <git-ref>].","needsReceipt":"Name the receipt to check: penstock receipt check <receipt.json>.","badRef":"{ref} is not a git ref that Penstock can use.","unknownRef":"{ref} is not a commit in the git history of this project.","differentProject":"{file} is not inside the project {root}; verify the files of one project at a time.","notAFile":"{file} is not a file.","written":"Receipt written to {file}.","receiptOutside":"{file} is outside the project.","receiptUnreadable":"{file} could not be read.","receiptInvalid":"{file} is not a Penstock receipt: {problems}","matches":{"one":"{file}: the file matches the receipt.","other":"{file}: all {count} files match the receipt."},"differs":{"one":"{file}: the file no longer matches the receipt.","other":"{file}: {count} files no longer match the receipt."},"mismatch":{"changed":"changed since the receipt was made","missing":"missing","exists":"exists, but the receipt says it was removed","outside":"outside the project","unreadable":"could not be read"},"gateBadBase":"{base} is not a git ref that Penstock can use.","gateNoHistory":"Penstock cannot read the history between {base} and HEAD. Fetch the full history (in GitHub Actions, fetch-depth: 0) so it can tell which changes an agent made.","gateNone":"No change since {base} was made by an agent, so no receipt is needed.","gateOk":{"one":"The file an agent changed has a receipt.","other":"The {count} files an agent changed all have a receipt."},"gateMissing":{"one":"The file an agent changed has no valid receipt:","other":"{count} files an agent changed have no valid receipt:"},"gateMore":"and {count} more","gateInvalid":{"one":"One stored receipt is not valid and was ignored.","other":"{count} stored receipts are not valid and were ignored."},"gateHow":"Run penstock receipt verify <file> --write and commit the receipt in .penstock/receipts."},"dmnTests":{"unknownTest":"Say what to test: penstock test task <file.bpmn> --element <id>, or penstock test dmn <file|folder>.","noFiles":"No DMN file found in {targets}.","badCoverage":"--min-rule-coverage must be a number from 0 to 100, not {value}.","coverageBelow":"Rule coverage is {percent}%, below the required {min}%.","preview":"Free preview: the first 3 cases of each decision were run. More cases are part of Penstock Pro.","saved":"Saved the case in {file}."},"policy":{"unknownAction":"\\"{action}\\" is not a policy command. Use one of: {actions}.","needsRule":"add-rule needs the name of a rule, for example penstock policy add-rule label-required --severity error.","needsSeverity":"add-rule needs --severity error, warn or off."},"evidence":{"badSince":"The ref \\"{ref}\\" is not a git ref this project has.","tooManyDiagrams":"The project has more than {limit} diagrams, decisions and forms, so no pack was built.","notInspected":"\\"{file}\\" is a link, too large or outside the project, so it was not inspected and no pack was built.","notDrawn":"\\"{file}\\" could not be drawn ({reason}), so no pack was built.","none":"nothing in this project","noSince":"no --since given","teamOnly":"part of the Team plan","included":"included","left":"left out","noGit":"not a git repository","title":"Penstock evidence pack","tool":"Built by Penstock {version} at {at}.","commit":"Git commit and author: {commit}","sealNote":"evidence.sha256 is the SHA-256 of evidence.json. It is an integrity checksum that shows the pack was changed afterwards. It is not a signature and not a legal attestation.","column":{"file":"File","bytes":"Bytes"},"dirNotZip":"--format dir writes a folder, so \\"{out}\\" should not end in .zip.","refused":"No evidence pack was written:","built":"Evidence pack written to {path}. Files listed: {files}.","sealed":"Seal (SHA-256 of evidence.json): {seal}","verified":"The pack is intact: {files} files match the manifest, and the seal {seal} matches evidence.json.","tampered":"The pack does not match its manifest and seal:","needsPack":"Say which pack to verify: penstock evidence verify <pack>.","unknownAction":"There is no such evidence command. Use one of: {actions}."}},"actions":{"undo":{"title":"Undo","tooltip":"Undo"},"redo":{"title":"Redo","tooltip":"Redo"},"auto-layout":{"title":"Auto layout","tooltip":"Lay the diagram out again"},"diagram-check":{"title":"Check","tooltip":"Check the diagram for problems"},"token-simulation":{"title":"Simulate","tooltip":"Run tokens through the process"},"coverage":{"title":"Coverage","tooltip":"Show what the process tests reach"},"live":{"title":"Monitor","tooltip":"What the engine is doing with this diagram now: instances waiting at each step and incidents"},"runs":{"title":"Scenarios","tooltip":"Run this diagram's scenarios on a local engine and see every step"},"migration":{"title":"Migrate to Camunda 8","tooltip":"What does not carry over to Camunda 8, and converting it"},"convert-operaton":{"title":"Convert to Operaton","tooltip":"Move a Camunda 7 or CIB seven diagram to the operaton: namespace"},"deploy":{"title":"Deploy","tooltipTo":"Deploy to {url}","tooltipEngine":"Deploy to the engine","noEngine":"Add an engine to penstock.yaml to deploy"},"open-tasklist":{"title":"Open in Tasklist","tooltip":"Open Tasklist in your browser"},"toggle-sidebar":{"title":"Sidebar","tooltip":"Sidebar"},"focus-canvas":{"title":"Focus canvas","tooltip":"Hide the sidebars and show only the canvas; press again to show them"},"fit-diagram":{"title":"Fit diagram","tooltip":"Show the whole diagram in the canvas"},"zoom-in":{"title":"Zoom in"},"zoom-out":{"title":"Zoom out"},"transaction-boundaries":{"title":"Transaction boundaries","tooltip":"Show where the engine commits a transaction: wait states and asynchronous continuations"},"minimap":{"title":"Minimap"},"trace-paths":{"title":"Trace paths","tooltipOn":"Show every path that runs through the selected element, and dim the rest of the diagram","tooltipOff":"Select a task, a gateway or an event to trace the paths that run through it"},"sketchy":{"title":"Sketchy drawing"},"show-comment-badges":{"title":"Show comment badges","tooltip":"Draw the number of open comments on each element that has some"},"export":{"title":"Export…","tooltip":"Save the diagram as SVG, PNG or PDF, or copy it as a picture"},"marketplace":{"title":"Templates…"},"import":{"title":"Import from another tool…","tooltip":"Turn a draw.io, Visio, Signavio, Bizagi or Flowable diagram into BPMN, and see what carries over before anything is written"},"share":{"title":"Share as HTML…","tooltip":"One file that opens offline in any browser"},"copy":{"title":"Copy"},"paste":{"title":"Paste"},"tour":{"title":"Show the tour again"},"keyboard-shortcuts":{"title":"Keyboard shortcuts","tooltip":"Every shortcut in this editor"},"open-documentation":{"title":"Documentation","tooltip":"Open the guide in your browser"},"undo-long":{"title":"Undo","tooltip":"Undo Last Operation"},"redo-long":{"title":"Redo","tooltip":"Redo Last Operation"},"dmn-check":{"title":"Check","tooltip":"Check decisions"},"export-table-workbook":{"title":"Export decision table as a workbook…","tooltip":"Save the inputs, the outputs and every rule as an Excel workbook"},"export-table-csv":{"title":"Export decision table as CSV…","tooltip":"Save the inputs, the outputs and every rule as comma separated values"},"import-table":{"title":"Import decision table…","tooltip":"Replace the rules of the selected table with those in a workbook or CSV"},"import-table-new":{"title":"Add rules from spreadsheet…","tooltip":"Fill the open decision table with the rules in a workbook or CSV"},"dmn-trace-paths":{"title":"Trace paths","tooltipOn":"Show every decision and input the selected decision needs, and everything that depends on it","tooltipOff":"Select a decision in the requirements diagram to trace what it needs"},"preview":{"title":"Preview","tooltip":"Try the form with sample data"},"form-check":{"title":"Check","tooltipUnreadable":"This form could not be read, so there is nothing to check","tooltip":"Check form"},"section":{"checkRun":"Check & run","layoutConvert":"Layout & convert","deployShare":"Deploy & share","view":"View","file":"File","edit":"Edit","help":"Help","recent":"Recent"},"editor-theme":{"title":"Editor theme","tooltip":"Follow the IDE, or use Light, Dark or Dracula"},"start-instance":{"title":"Start instance…","tooltip":"Start a process instance on the connected engine"},"debug-process":{"title":"Debug process","tooltip":"Run a copy of this process on a local engine and stop at breakpoints to read and change its variables"},"toggle-breakpoint":{"title":"Toggle breakpoint","tooltip":"Stop the debugger before the selected step"},"compare-with-head":{"title":"Compare with last commit","tooltip":"Show what changed since the last commit"},"show-licence":{"title":"Licence","tooltip":"See the plan, enter a licence key or buy one"},"timeline":{"title":"Timeline","tooltip":"Scrub through the steps of a run: an engine instance chosen in Monitor, or a scenario run"},"show-code-badges":{"title":"Show code badges","tooltip":"Draw a mark on each task that says whether its code was found in the project"},"chat":{"title":"AI chat","tooltip":"AI chat"},"test-task":{"title":"Test task…","tooltip":"Run the selected element on a local engine: the path before it is completed or mocked, and what it did is shown in Scenarios"},"template-source":{"title":"Source","tooltip":"Edit the template as JSON; the form follows what you type"},"template-loading":{"title":"Why not loaded","tooltip":"Which template files Camunda Desktop Modeler and Web Modeler load, and the reason when one does not"},"template-check":{"title":"Check","tooltip":"Check the template against the element template schema"},"cmmn-text":{"title":"Open as text","tooltip":"Penstock shows case models but cannot edit them; open the file in the text editor to change it"},"cmmn-check":{"title":"Check","tooltip":"Check the case model for references that point at nothing"},"evidence-pack":{"title":"Create evidence pack…","tooltip":"One reviewable package for an audit: the diagrams, the checks, the test results and what changed, with the SHA-256 of every file"},"refactor":{"title":"Refactor…","tooltip":"Rename a variable, message, signal, error, job type, decision, form or process across the project, or extract part of a diagram into a call activity"}},"autoLayout":{"autoLayout":"Auto layout","laidOut":{"one":"Laid out {count} element","other":"Laid out {count} elements"}},"canvas":{"debugTests":"Debug Tests","findUsagesInCode":"Find Usages in Code","goTo":"Go to {label}","goToImplementation":"Go to Implementation","runTests":"Run Tests","unableToReadTheFile":"Unable to read the file again"},"code":{"findUsages":"Find usages","followingAStepToThe":"Following a step to the code that runs it, its tests and its usages is part of Penstock Pro. A Camunda 7 class or bean is followed on Free.","goToCode":"Go to code","noCodeFoundForThis":"No code found for this step.","nothingInTheProjectRuns":"Nothing in the project runs, tests or uses it. A service task is linked by its job type, class or bean.","selectATaskToSee":"Select a task to see its code.","theProjectHasNotBeen":"The project has not been read yet.","theWorkersClassesBeansAnd":"The workers, classes, beans and tests behind a step show here once you select it on the diagram.","section":{"implementations":"Runs in","tests":"Tests","usages":"Used in"},"warn":{"missingImplementation":"Nothing in the code runs this step.","neverThrown":"Nothing in the code throws the error this step catches.","unsetTypo":"{name} is read, but only {closest} is set.","unset":"{name} is read, and nothing sets it.","unfetchedClosest":"The worker fetches {closest}, not {name}, so {name} is null.","unfetched":"The worker does not fetch {name}, so it is null.","unread":"The worker sets {name}, and no step after this one reads it.","lateRead":"The worker reads {name}, and no step before this one sets it.","nearCase":"This step's {name} differs in case from the {near} in the code.","near":"The code has {near}, one letter off the {name} this step uses.","implicit":"The job type of this step is the method name {method}, which a rename changes.","mappingOrder":"The mapping reads {path} as null: {target} is set by an earlier line.","lostUpdate":"Every parallel instance writes {name} over the others: the step has no output element."},"kind":{"JOB_TYPE":"the job type","TOPIC":"the topic","CLASS":"the java class","BEAN":"the bean","MESSAGE":"the message name","ERROR":"the error code"},"fact":{"places":{"one":"{count} place","other":"{count} places"},"here":{"one":"{count} here","other":"{count} here"},"withIncident":{"one":"{count} with an incident","other":"{count} with an incident"},"reachedBy":"reached by {tests} of {total} tests","notFetched":"not fetched by the worker","near":"the code has '{near}'","neverSet":"never set in the project","reached":"reached","thrownBy":"Thrown by","runsIn":"Runs in","nothingInCode":"nothing in the code","tests":"Tests","inCode":"In code","sets":"Sets","reads":"Reads","notFetchedClosest":"not fetched, '{closest}' is","unread":"written, read by no step after","lateRead":"read, set by no step before it","nearCase":"only '{near}' differs in case in the code","implicit":"taken from the method {method}","mappingOrder":"reads null, {target} is set by an earlier line","lostUpdate":"written by every instance, no output element","neverSetClosest":"never set, '{closest}' is","noTestReaches":"no test reaches it","coverage":"Coverage","theEngine":"the engine","on":"On {where}","testsReach":{"one":"{count} test reaches it","other":"{count} tests reach it"}},"finding":{"unfetchedWhere":"the code reads it, so it is null at runtime","missingImplementation":"Nothing in the code runs {name}","missingImplementationWhere":"no worker, delegate or bean implements it","neverThrown":"Nothing in the code throws the error {name} catches","neverThrownWhere":"no BpmnError or error command uses its code","typo":"{name} is read, but only {closest} is set","unfetched":"The worker does not fetch {name}","unfetchedClosestWhere":"it fetches {closest} instead, so {name} is null at runtime","unread":"Nothing reads {name} after this step","unreadWhere":"the worker sets it, and no later step reads it","lateRead":"Nothing sets {name} before this step reads it","lateReadWhere":"the worker reads it, and no step before it sets it","nearCase":"{name} differs in case from {near}, which the code has","near":"The code has {near}, one letter off the {name} this step uses","nearWhere":"{kind}, a name that does not match leaves the step with no implementation","implicit":"The job type of this step is the method name {method}","implicitWhere":"@JobWorker without a type takes the method name, so renaming it breaks the diagram","mappingOrder":"{path} is read as null, {target} is set by an earlier mapping line","mappingOrderWhere":"the engine evaluates every source before it writes any target","lostUpdate":"Every instance writes {name} over the others","lostUpdateWhere":"a parallel multi-instance step with no output element keeps only the last result","templateDrift":"The element template {name} no longer says what the worker reads: {drift}","variableField":"The variable {variable} has no field {field}. Its type {type} has {fields}","variableFieldNone":"The variable {variable} has no field {field}. Its type {type} has no field the engine reads","variableFieldWhere":"Read here, set by {from}","variableFieldWhereUnknown":"Read here","variableUnknown":"The variable {name} is read, but nothing in the diagram or the code sets it","variableUnknownWhere":"Nothing upstream sets it, and it is not a declared input"},"runTests":"Run tests","debugTests":"Debug tests","saidBy":{"elementsInFiles":"{count} elements in {files} diagrams","tasksInFiles":"{count} tasks in {files} diagrams","elementsInOneFile":"{count} elements in {file}","one":"{label} in {file}","tasksInOneFile":"{count} tasks in {file}"},"wording":{"caughtBy":"Caught by","decidedBy":"Decided by","namedBy":"Named by","readBy":"Read by","setBy":"Set by","startedBy":"Started by","usedBy":"Used by"},"showAllCount":{"one":"Show all {count}","other":"Show all {count}"},"lens":{"covers":"covers {percent}% of {label}","starts":"starts {label}"}},"comments":{"aCommentBelongsToAn":"A comment belongs to an element of the process, not to what the canvas draws around it.","addAComment":"Add a comment","addComment":"Add comment","everyElementThatStillHas":"Every element that still has a comment is in the list behind the back arrow.","everyOpenCommentInThe":"Every open comment in the diagram shows here.","hideResolved":"Hide resolved","noCommentsYet":"No comments yet.","noOpenComments":"No open comments.","sayWhatThisElementIs":"Say what this element is for, or what is still missing","selectAnElementAndAdd":"Select an element and add a comment to it.","showOnTheDiagram":"Show {label} on the diagram","showResolved":"Show resolved ({resolved})","thisElementCannotTakeComments":"This element cannot take comments.","thisElementIsNoLonger":"This element is no longer in the diagram.","waitingForADiagram":"Waiting for a diagram.","openCount":{"one":"{count} open","other":"{count} open"},"openCommentCount":{"one":"{count} open comment","other":"{count} open comments"},"resolvedCount":{"one":"{count} resolved","other":"{count} resolved"},"openAndResolved":"{open} open, {resolved} resolved","openTheComments":"{title} - open the comments","commentsOf":"{comments} of {element}","anonymous":"Anonymous","resolvedState":"Resolved","comment":"Comment","edit":"Edit","save":"Save","cancel":"Cancel","reopen":"Reopen","resolve":"Resolve","delete":"Delete","signedBy":"Signed {name}","writeTheFirstOneBelow":"Write one below to start a thread on this element."},"coverage":{"closeCoverage":"Close coverage","showTheWayThisTest":"Show the way this test takes","testCoverage":"Test coverage","coverage":"Coverage","tests":"Tests","allTests":"All tests","notReached":"Not reached","coveredOf":"{covered} of {total}","noTestReportCoversThis":"No test report covers this diagram yet. Run its process tests with Camunda Process Test, or on Camunda 7 with the process test coverage extension, and what they reach shows here.","testCount":{"one":"{count} test","other":"{count} tests"}},"debug":{"pausedHere":"Paused here","instanceOf":"instance {id}"},"deploy":{"clientId":"Client id","clientSecret":"Client secret","confirm":"Deploy {what} to {where}?","deployHook":"Deploy hook","deployToCancelled":"Deploy to {target} cancelled","deployingTo":"Deploying {fileName} to {target}…","editConnection":"Edit connection…","editConnection2":"Edit connection","engineAddress":"Engine address","engineConnection":"Engine connection","enterTheClientId":"Enter the client id","enterTheClientSecret":"Enter the client secret","enterThePasswordToSign":"Enter the password to sign in with","enterTheUserNameTo":"Enter the user name to sign in with","files":{"one":"{count} file","other":"{count} files"},"keptInPenstockLocalYaml":"Kept in penstock.local.yaml, which stays on this machine.","keptInTheIdeS":"Kept in the IDE's password safe.","notNeeded":"Not needed","notReady":"{name} was not deployed: {target} has no address or password yet, set it under Connection in the editor","notSetYet":"Not set yet","nothingInToDeploy":"Nothing in {fileName} to deploy","nothingToDeploy":"Nothing to deploy","profile":"Profile","profileInForce":"the profile in force","readingTheDiagram":"Reading the diagram…","runningTheDeployHook":"Running the deploy hook…","saveAndDeploy":"Save and deploy","savedInTheIdeS":"Saved in the IDE's password safe. Type to replace it.","setUpConnection":"Set up connection…","signIn":"Sign in","signInHint":"{message}. Set the sign-in under Connection in the editor","succeededOn":"{message} on {target}","title":"Deploy","tokenAddress":"Token address","unableToDeploy":"Unable to deploy: {reason}","unableToSaveTheConnection":"Unable to save the connection: {failure}","userAndPassword":"User and password","whatWillBeSent":"What will be sent","deploy":"Deploy","problemLine":"line {line}","andNMore":"and {number} more","definitionIsLive":"live {key} v{version}","notConfirmedInTime":"not confirmed within {seconds}s: {key}","preDeployHookFailed":"Unable to run the preDeploy hook, nothing was sent","refusedNothingDeployed":{"one":"The engine refused {count} file and deployed nothing:","other":"The engine refused {count} files and deployed nothing:"},"answeredStatus":"The engine answered {status}: {reason}","deployedFiles":"Deployed {files}","deployedAs":"Deployed {files} as {definitions}","definitionsNotShownInTime":"The engine took the deployment but did not show its definitions in time","oauthClient":"OAuth client","user":"User","password":"Password","audience":"Audience","nameTenantAndTheRest":"Name, tenant and the rest are set in penstock.yaml.","addressScheme":"The engine address should start with http:// or https://","tokenAddressScheme":"The token address should start with http:// or https://","hookCancelled":"hook {stage}: cancelled"},"diagramCheck":{"convert":"Convert…","fix":"Fix","noProblemsFound":"No problems found.","nothingToReportAcrossElements":"Nothing to report across {checked} elements and connections. The check runs again as you edit.","showTheDiagramConvertedFor":"Show the diagram converted for Camunda {target}, and choose what to write","theCheckStartsOnIts":"The check starts on its own as soon as the diagram is read, and runs again as you edit.","howItRuns":"How it runs","drawing":"Drawing","engine":"Engine","code":"Code","rules":"Rules","why":"Why","error":"Error","warning":"Warning","templates":"Element templates","connections":"Connections","agents":"AI agents"},"dmn":{"addRules":"Add rules","addRulesFrom":"Add rules from {source}","cell":"Cell","change":"Change","checkTheDecisionsToSee":"Check the decisions to see problems here.","hitPolicy":"Hit policy {hitPolicy}","import":"Import {source}","intoTheOpenDecisionTable":"Into the open decision table: ","intoTheSelectedTable":"Into the selected table: ","openADecisionTableEnter":"Open a decision table, enter the values its inputs ask for and see which rules match and what the decision returns.","openTheRequirementsDiagram":"Open the requirements diagram","openTheRequirementsDiagramTo":"Open the requirements diagram to change the decision's name, its inputs and how its rules reach it.","requirements":"Requirements","rule":"Rule","selectADecisionTableTo":"Select a decision table to try it.","thePropertiesOfADecision":"The properties of a decision are edited in the requirements diagram.","thisShouldBeADate":"This should be a date, as YYYY-MM-DD.","thisShouldBeANumber":"This should be a number.","thisShouldBeTrueOr":"This should be true or false.","view":{"boxedExpression":"Boxed expression","decisionTable":"Decision table","drd":"Requirements diagram","literalExpression":"Literal expression"},"viewTooltip":"{kind}: {label}","count":{"rule":{"one":"{count} rule","other":"{count} rules"}},"readErrorAtLine":"{reason} (line {line})","namedLikeAWorkbook":"{file} is named like a workbook but is not one.","noHeaderRow":"The file has no header row naming the inputs and outputs.","theFileIsEmpty":"The file is empty.","workbookNotOpened":"The workbook could not be opened. It may be damaged or password protected.","workbookHasNoSheet":"The workbook has no sheet to read.","headerNeeds":"The header names {header}; the table needs {wanted}","rowCannotBeRead":"Row {line} cannot be read: \\"{cell}\\" is not a comparison, a range or a value","pasteColumnsLeftOut":{"one":"{count} pasted column has no place in the table and was left out.","other":"{count} pasted columns have no place in the table and were left out."},"duplicateId":"The id {id} is used by more than one element, so Penstock cannot tell them apart","nothingChanges":"nothing changes","aNewTableWith":"a new table with {rules}","ruleChanges":{"one":"{count} rule changes","other":"{count} rules change"},"rulesAreAdded":{"one":"{count} rule is added","other":"{count} rules are added"},"rulesAreRemoved":{"one":"{count} rule is removed","other":"{count} rules are removed"},"notADocument":"The file is not a DMN document","notValid":"The file is not valid DMN: {reason}","saveAsCsv":"Save the decision table as CSV","saveAsWorkbook":"Save the decision table as a workbook","csvIsOneCellPerColumn":"Comma separated values, one cell per column","workbookHasInputsAndOutputsFirst":"An Excel workbook with the inputs and outputs in the first row","createFromSpreadsheet":"Create a decision table from a spreadsheet","importIntoTheTable":"Import a spreadsheet into the decision table","spreadsheetNamesTheInputs":"An Excel workbook or a CSV whose first row names the inputs and the outputs","notReadAsASpreadsheet":"The file could not be read as a spreadsheet.","importAction":"Import","theTableAlreadySays":"The table already says this, so there is nothing to import. Cancel, or change the file and try again.","oneUndoTakesTheImport":"One undo takes the whole import back.","sheetName":"Decision table"},"dmnMode":{"decisionCheck":"Decision check","gotIt":"Got it","noDecisionTableIsOpen":"No decision table is open, so there is nowhere to put the rules. Open a decision table from the Requirements diagram and import the file again.","noDecisionTableIsOpen2":"No decision table is open, so there was nothing to write the rules into. Open a decision table from the Requirements diagram and import the file again.","noRulesOverlapAndEvery":"No rules overlap, and every input has a rule.","theDecisionTableWasSaved":"The decision table was saved to {saved}.","theRulesWereAddedTo":"The rules were added to the open decision table. Undo takes them back.","theRulesWereReplacedUndo":"The rules were replaced. Undo takes them back."},"editor":{"checkTitle":"Diagram check","configFailed":"Unable to load the project configuration.","convert":"Convert","convertText":"This will convert all camunda: properties and attributes to operaton: ones. Would you like to proceed?","convertTitle":"Convert namespace","copiedImage":"Copied as an image","copyImageFailed":"The image could not be copied","deleteFailed":"Unable to delete the elements","exportFailed":"Unable to export: {message}","exportOpenFailed":"Unable to open the export dialog","exported":"Diagram exported as {format}","importFailed":"The diagram could not be imported: {message}","layoutFailed":"Unable to lay out the diagram","noLayout":{"laidOut":"This file had no layout. Penstock laid it out; the file is unchanged until you save.","placed":"This file had no layout, so Penstock placed the elements in a simple grid. Auto layout (Pro) arranges it properly."},"layoutBadShape":"Unable to lay out the diagram: {element} has a shape that cannot be drawn ({problem}). Fix its bounds in the file and try again.","layoutBadWaypoint":"a waypoint is at ({x}, {y})","layoutTooSlow":"Unable to lay out the diagram within {seconds} seconds. It is too large or too tangled for auto layout. The diagram was not changed.","layoutAnElement":"an element","loadFailed":"Unable to load the diagram: {message}","loading":"Loading...","namespaceMessage":"This is an Operaton project, but the diagram uses the Camunda 7 namespace.","namespaceTitle":"Wrong engine namespace","noMatch":"Nothing in this project matches {reference}","noTest":"No test in this project uses {name}","noUsage":"No code in this project uses {name}","noWorker":"No code in this project implements {name}","reloadFailed":"The file changed and could not be read as BPMN","saveFailed":"Unable to save the changes","saveRefused":"Unable to save the changes: {reason}","stopSimulation":"Stop Token Simulation before editing the diagram","traceFailed":"The trace of that run could not be read","unknownError":"Unknown error","pasteEmpty":"The clipboard is empty. Copy a diagram element first.","pasteNotDiagram":"The clipboard holds text, not diagram elements, so there is nothing to paste.","pasteOtherDiagram":"The clipboard holds elements of another kind of diagram, so there is nothing to paste here.","pasteUnreadable":"Penstock cannot read the clipboard in this browser. Paste on the diagram with the keyboard instead."},"editorShell":{"close":"Close {title}","collapsePalette":"Collapse palette","openPalette":"Open palette","showAllMore":"Show all ({more} more)","useCheckInTheToolbar":"Use Check in the toolbar to look for problems."},"engineQuestion":{"itDecidesThePaletteAnd":"It decides the palette and the properties, and goes into penstock.yaml. The diagram opens as soon as you have chosen.","theEngineCouldNotBe":"The engine could not be saved: {error}","whichEngineRunsThisDiagram":"Which engine runs this diagram?"},"files":{"connectorsFailed":"The connectors directory could not be used (HTTP {status})","exportAs":"Export as {format}","saveTitle":"Save {extension} file"},"form":{"checkTheFormToSee":"Check the form to see problems here.","everyFieldWritesItsOwn":"Every field writes its own variable, and every option means something different.","nothingToPreviewYet":"Nothing to preview yet.","thePreviewFillsInAs":"The preview fills in as soon as the form is read.","theReasonIsOnThe":"The reason is on the canvas. Fix the file and Penstock reads it again.","thisFormCouldNotBe":"This form could not be read, so there is nothing to check."},"formMode":{"formCheck":"Form check"},"formPreview":{"inputDataOfTheForm":"Input data of the form as JSON","sample":"Sample {key}","sampleData":"Sample data","theInputHasToBe":"The input has to be a JSON object.","theInputIsNotValid":"The input is not valid JSON: {failure}","inputData":"Input data","outputData":"Output data","fieldsNeedAttention":{"one":"{count} field needs attention","other":"{count} fields need attention"}},"importDiagram":{"aDrawIoVisioSignavio":"A draw.io, Visio, Signavio or Bizagi diagram","diagramImported":"Diagram imported","importDiagram":"Import diagram","saveTheImportedDiagram":"Save the imported diagram","theBpmn20File":"The BPMN 2.0 file to create","thisFileCouldNotBe":"This file could not be imported","why":{"assumed":"These were read by what they look like. Check that they are what you meant.","lost":"BPMN 2.0 has no place for these, so they are not in the new diagram.","unmapped":"These have no BPMN meaning and are not in the new diagram."},"savedAs":"Saved as {path}","everythingInTheFileWas":"Everything in the file was mapped.","connectorsKeepTheRoute":"Connectors keep the route they were drawn with. Auto layout can tidy the result.","fromAnotherTool":"Import from another tool","sourceLabel":"The file comes from","sourceHint":"Pick the tool to be sure the right extensions are read; a file from another tool is refused.","sourceAuto":"Detect automatically","targetLabel":"Convert Flowable extensions to","chooseFile":"Choose file…","saveAs":"Save as…","previewTitle":"Import preview","previewLead":"Nothing has been written yet. Check what carries over and what does not, then save."},"lint":{"nothingToShowOnThe":"Nothing to show on the diagram","showWhereTheyAreOn":"Show where they are on the diagram"},"live":{"userTasks":"User tasks","noUserTasksWaiting":"No user tasks are waiting on this instance.","unableToLoadTasks":"Unable to load user tasks from the engine.","unableToCompleteTask":"Unable to complete user task.","unableToConnect":"Unable to connect to the engine.","completing":"Completing…","taskCompleted":"Task completed.","askTheEngineAgain":"Ask the engine again","askingTheEngine":"Asking the engine…","history":"History","noFinishedInstances":"No finished instances found.","noFinishedInstancesHint":"Instances that completed or were cancelled will appear here.","askingHistory":"Asking the engine for finished instances…","compareWithWhatTheEngine":"Compare with what the engine has seen","isNotDeployed":"{processId} is not deployed.","itIsNotOnYet":"It is not on {where} yet. Deploy the diagram to see its instances.","noEngineConnected":"No engine connected.","noInstanceIsRunning":"No instance is running.","nothingIsWaitingOrHas":"Nothing is waiting or has an incident on {where}.","openTheCodeThatRuns":"Open the code that runs this task","openInTasklist":"Open in Tasklist","readTheVariables":"Read the variables","readingWhichInstancesOfThis":"Reading which instances of this diagram are running and what they are waiting on.","refresh":"Refresh","setUpADeploymentProfile":"Set up a deployment profile with an address, and a password if it needs one, to see the instances waiting on each task and their incidents.","showOnTheDiagram":"Show {selected} on the diagram","theEngineCouldNotBe":"The engine could not be read.","use":"Use","useThisInstanceForAn":"Use this instance for an expression","waitingHere":"{waiting} waiting here","instance":"Instance","tryOnInstance":"Try on instance","variables":"Variables","neverSetInProduction":"Never set in production","unusedInTheModel":"Unused in the model","incidents":"Incidents","waiting":"Waiting","credentialsMayNotAllow":"The engine refused the question ({status}): the profile's credentials may not allow reading process instances","answeredStatus":"The engine answered {status}","answeredNotJson":"The engine answered with something that is not JSON","localEngine":"Local {engine}","theEngine":"the engine","processVersion":"process version {version}","namedProcessVersion":"{process} version {version}","incidentsOn":{"one":"{count} incidents · {what}","other":"{count} incidents · {what}"},"incidentsBadge":{"one":"{count} with an incident","other":"{count} with an incident"},"askingWhichInstancesRun":"Asking {where} which instances of {process} are running.","noInstanceRunning":"No instance of {process} is running on {where}.","secretNotResolved":"{value} - a secret, so the engine did not resolve it","selectATaskToTryOn":"Select a task, a gateway or a flow to try its conditions and mappings on {instance}.","trying":"Trying","try":"Try","reading":"Reading","select":"Select {name}","sevenCannotEvaluateHere":"Camunda 7 has no way to evaluate an expression. It needs Camunda 8.9 or newer, so the variables of the instance are what you get.","theModelAndTheEngineAgree":"The model and the engine agree on every variable name.","theEngineHasSeenThese":"The engine has seen these, and nothing in the diagram names them.","asking":"Asking","thisNeedsCamunda":"This needs Camunda {version}.","instancesHere":{"one":"{count} instance","other":"{count} instances"},"urlAt":"{url} at {when}","startInstance":"Start instance","startInstanceEllipsis":"Start instance…","startInstanceTooltip":"Start a process instance on the connected engine","startingInstance":"Starting…","processDefinition":"Process ID","variablesJson":"Variables (JSON)","variablesHelp":"JSON object with variables to pass to the instance","variablesInvalidJson":"Variables should be valid JSON","variablesMustBeObject":"Variables should be a JSON object","instanceStarted":"Started instance {id}","unableToStartInstance":"Unable to start instance","retry":"Retry","retrying":"Retrying","retryIncident":"Retry this incident","unableToRetryIncident":"Unable to retry incident: {reason}","cancelInstance":"Cancel instance","cancelling":"Cancelling","cancelInstanceTitle":"Cancel instance","cancelInstanceConfirm":"Cancel process instance {instance}?","unableToCancelInstance":"Unable to cancel instance: {reason}","sendMessage":"Send message","broadcastSignal":"Broadcast signal","messageName":"Message name","signalName":"Signal name","correlationKey":"Correlation key","sending":"Sending","broadcasting":"Broadcasting","send":"Send","broadcast":"Broadcast","unableToSendMessage":"Unable to send message: {reason}","unableToBroadcastSignal":"Unable to broadcast signal: {reason}"},"main":{"fileChangedOnDisk":"File Changed on Disk","keepEditing":"Keep Editing","theDiagramWasChangedOutside":"The diagram was changed outside the editor. Reloading loads those changes and drops what you have not saved; keeping it means your next save overwrites them."},"marketplace":{"anyElement":"Any element","backToTheTemplates":"Back to the templates","category":"Category","checkForUpdates":"Check for updates","checkingForANewerRelease":"Checking for a newer release…","connectorTemplates":"Connector templates","default":"Default:","deprecated":"Deprecated","downloadingTheConnectorTemplatesFrom":"Downloading the connector templates from GitHub…","elementType":"Element type","isNotInTheProject":"{id}{version} is not in the project or in the downloaded connector templates","loadingTemplateDetails":"Loading template details…","needsANewerCamundaEngine":"Needs a newer Camunda engine than this diagram targets","noTemplateFitsThisDiagram":"No template fits this diagram's engine","noTemplateMatchesTheFilters":"No template matches the filters","otherProperties":"Other Properties","saveElementTemplate":"Save Element Template: {name}","searchTemplatesByNameDescription":"Search templates by name, description or keyword","selectLocationToSaveThe":"Select location to save the element template","templateInstalled":"Template \\"{name}\\" installed","templateNotDownloaded":"Template not downloaded","download":"Download","templateSavedPenstockFindsTemplates":"Template \\"{name}\\" saved. Penstock finds templates in a .camunda/element-templates folder above the diagram; list this file under elementTemplates in penstock.yaml to use it from here.","theConnectorTemplatesCouldNot":"The connector templates could not be loaded","thisDiagramTargetsCamunda":"This diagram targets Camunda {engineVersion}","type":{"Boolean":"Checkbox","Dropdown":"Select","Hidden":"Hidden","Number":"Number","String":"Text","Text":"Multi-line Text"},"unableToInstallTheTemplate":"Unable to install the template: {failure}","viewDocumentation":"View documentation","overview":"Overview","appliesTo":"Applies to","engine":"Engine","properties":"Properties","configurationProperties":"Configuration properties","details":"Details","all":"All","installedOnly":"Installed only","clearFilters":"Clear filters","today":"today","todayAt":"today at {time}","tomorrowAt":"tomorrow at {time}","yesterday":"yesterday","daysAgo":{"one":"{count} day ago","other":"{count} days ago"},"notAmongConnectors":"{ids} is not among Camunda's published connector templates","thisDiagramTargets":" - this diagram targets {version}","camundaConnectors":"Camunda connectors {ref}","checked":", checked {when}","couldNotCheckForANewerRelease":"Could not check for a newer release: {error}","couldNotDownloadConnectors":"The connector templates could not be downloaded from GitHub: {error}","triedAgainAfter":" They are tried again after {when}.","templateCount":{"one":"{count} template","other":"{count} templates"},"forCamunda":" for Camunda {version}","unnamed":"Unnamed","feelIs":"FEEL: {feel}","options":"Options:","install":"Install","installed":"Installed","installing":"Installing…","configurable":"{number} configurable","showForNewerEngines":"Show {number} for newer engines"},"migration":{"apply":{"afterDependencies":"The worker skeletons need the Camunda 8 client library ({dependency}) in the build; they do not compile or run until it is added.","reason":{"changed":"changed since it was read","symlink":"is a symbolic link","outside":"is outside the project","appeared":"appeared after the plan was made","vanished":"is gone"},"refused":"Nothing was written: {files}","configChange":"penstock.yaml now says engine: camunda-8, so the files are checked as Camunda 8","alreadyThere":"The file is already there and was left as it is","outsideProject":"The name of this file points outside the project, so it was not written","workerReason":"Job worker skeleton for the job type {jobType}","reportReason":"The migration report: what changed and what needs a person","title":"Camunda 7 to Camunda 8 migration","intro":"Written by penstock migrate apply for Camunda {target}. The Camunda 7 files were rewritten in place and nothing was deleted.","summaryHeading":"Summary","summaryFiles":"{rewritten} files rewritten, {created} files created","summaryElements":"{converted} elements converted, {manual} need a person, {review} to check","filesHeading":"Rewritten files","colFile":"File","colChanged":"Converted","colPerson":"Needs a person","colCheck":"To check","changesHeading":"What was changed","personHeading":"What needs a person","personNone":"Nothing needs a person.","kindManual":"to do","kindReview":"to check","refusedHeading":"Expressions and scripts that were not translated","refusedNone":"Every expression and script was translated.","workersHeading":"Job workers","workersNone":"No job worker is needed.","workersIntro":"Each job type below needs a running Camunda 8 job worker. The skeletons map the variables the old delegate read and wrote, where the code showed them.","colJobType":"Job type","colWorkerFile":"Worker file","colReads":"Reads","colWrites":"Writes","colUsedBy":"Used by","noSkeleton":"no skeleton written","createdHeading":"Files created or kept","unreadableHeading":"Files that could not be read","checkHeading":"Check under the Camunda 8 profile","checkNotRun":"The check was not run.","checkClean":"penstock check found nothing.","checkFound":"penstock check found {errors} errors and {warnings} warnings:","afterHeading":"After this","afterDelegates":"The Camunda 7 delegate and handler classes were not touched. Remove them once the workers run.","afterInstances":"Running instances and history stay on Camunda 7 until they finish or are moved with the Data Migrator."},"convertUnchanged":"Convert unchanged","needsWork":"Needs work","reviewAfterConverting":"Review after converting","saveTheDiagramFirstOnly":"Save the diagram first: only a diagram in a file can be converted.","theDiagramCouldNotBe":"The diagram could not be read.","change":{"async":"The asynchronous continuation is removed","jobWorkerTask":"Becomes a job worker task with the job type {jobType}","retries":"The retry cycle becomes {retries} retries","fieldHeaders":"The field injections {fields} become task headers","conditionFeel":"The condition is written as a FEEL expression","conditionRewritten":"The condition is rewritten as a FEEL expression","collection":"The collection {collection} becomes the input collection","loopCount":"The loop count {cardinality} becomes an input collection","completionCondition":"The completion condition is rewritten as a FEEL expression","messageName":"The message name {name} is written as a FEEL expression","timer":"The timer is rewritten as a FEEL expression","errorVariable":"The {source} is stored in the variable {variable} by an output mapping","feelScript":"The script becomes a FEEL script expression","userTask":"Becomes a Camunda user task","assignment":"The assignment becomes an assignment definition","formRef":"The form {form} is linked as a Camunda Form","externalForm":"The form key {formKey} is kept as an external form reference","generatedForm":"The form fields are written as the Camunda Form {form}","calledDecision":"Calls the decision {decision} and keeps its result in {result}","calledProcess":"Calls the process {process}","listener":"The {event} listener {name} becomes a job worker with the job type {jobType}","platform":"Marked as a Camunda {target} diagram","dmnVersion":"The decisions are moved to DMN 1.3","expressionRewritten":"The expression is rewritten as a FEEL expression","dmnHistoryTimeToLive":"The history time to live is removed, Camunda 8 does not use it","dmnPlatform":"Marked as a Camunda {target} decision file","formPlatform":"Marked as a Camunda {target} form","versionTag":"The version tag {tag} is kept as Camunda 8's version tag","ioMapping":{"one":"{count} input or output parameter becomes an input and output mapping","other":"{count} input or output parameters become an input and output mapping"},"asyncBefore":"asynchronous continuation","removed":"removed","camunda7Implementation":"Camunda 7 implementation","userTaskBefore":"user task"},"extraFile":{"form":"the form of {where}"},"failure":{"notBpmn":"The file is not a BPMN diagram Penstock can read.","notDmn":"The file is not a DMN diagram Penstock can read.","notForm":"The file is not a form Penstock can read."},"detail":{"scriptExpression":"the {format} script was read as one expression, and {format} treats text, numbers and null differently from FEEL","complexGateway":"Camunda 8 has no complex gateway.","complexGatewayAction":"Model the join with an inclusive or a parallel gateway and conditions.","transaction":"Camunda 8 has no transactions and no cancel events.","transactionAction":"Model it as a subprocess with an error boundary event and compensation.","mappingValue":"The value is a {type}, which the converter does not read.","noMapping":"Camunda 8 has no {kind} mappings on a {element}.","standardLoop":"Camunda 8 has no standard loops.","standardLoopAction":"Model the loop with a gateway and a sequence flow back, or as a multi-instance activity.","cancelEvent":"Camunda 8 has no transactions and no cancel events.","cancelEventAction":"Model it with an error event and compensation.","errorCode":"Camunda 8 error codes are fixed or given by the worker that throws them","decisionBound":"The decision {name}","callBound":"The call of {name}","noTarget":"A variable binding has no target.","decisionNamed":"The decision {name}","inputNamed":"The input {name}","ruleCondition":"A condition of rule {rule}","ruleOutput":"An output of rule {rule}","listenersOldTarget":"Camunda 8 has execution listeners from 8.6; this converts for {target}.","listenersNoSequenceFlow":"Camunda 8 has no listeners on sequence flows.","listenersNoOn":"Camunda 8 has no execution listeners on a {element}.","listenersEndOnly":"Camunda 8 runs only end listeners on a {element}.","listenersFields":"It is given injected fields, which Camunda 8 listeners do not have.","listenersExpression":"It is an expression or a script, and a Camunda 8 listener is a job for a worker.","taskListenersOldTarget":"Camunda 8 has task listeners from 8.8; this converts for {target}.","taskListenersNoEvent":"Camunda 8 has no {event} event for task listeners."},"juel":{"emptyBecame":"\\"empty\\" became a test for null, empty text, an empty list and an empty map, the four things Java EL counts as empty","stringOpen":"a string in it is not closed","character":"it uses \\"{what}\\", which has no FEEL counterpart","trailing":"it continues after a complete expression at \\"{what}\\"","expected":"\\"{what}\\" was expected where \\"{found}\\" is","propertyName":"a property name is missing after \\".\\"","tooComplex":"it is too long or too deeply nested to convert","wordAsValue":"\\"{what}\\" stands where a value was expected","endsEarly":"it ends too early","tokenAsValue":"\\"{what}\\" stands where a value was expected","contextObject":"it reads \\"{what}\\", which exists only inside the Camunda 7 engine","dollarInName":"the name \\"{what}\\" contains \\"$\\", which a FEEL name cannot","reservedWord":"\\"{what}\\" is a reserved word in FEEL","localVariable":"a local variable is read by name; in Camunda 8 the name resolves through the scopes, so check that no outer variable shadows it","businessKey":"it reads the business key, which Camunda 8 does not have; carry it as a process variable","engineId":"it reads an engine id, which a FEEL expression cannot see in Camunda 8","executionCall":"it calls execution.{what}(), which runs inside the Camunda 7 engine","takesOne":"{what}() takes one argument here","takesNone":"{what}() takes no argument here","equalsTakesOne":"equals() takes one argument here","size":"{target}.size() became count(), which works when the variable is a list; for a map, read its entries instead","javaCall":"it calls the Java method {what}(), and FEEL cannot call Java","exponent":"it writes a number with an exponent, which FEEL does not read","enginePath":"it reads {target}.{what}, which exists only inside the Camunda 7 engine","indexShifted":"a list index moved by one: FEEL counts list items from 1, Java from 0","computedIndex":"it reads an item by a computed index, and FEEL counts list items from 1 where Java counts from 0","juelFunction":"it calls {what}(), a function Camunda 7 provides and FEEL does not","namespacedFunction":"it calls the function {prefix}:{what}(), which Camunda 8 does not provide","empty":"it uses \\"empty\\" on something other than a variable, a property or an item, and FEEL cannot test that without naming it first","textPlus":"it adds text with \\"+\\", which Java EL does not allow and FEEL treats as joining strings","expressionOpen":"an expression in it is not closed with \\"}\\"","joinedStrings":"text with expressions inside became joined strings; a value that is null makes the whole text null in FEEL, where Camunda 7 wrote an empty string"},"worker":{"becomes":{"taskListener":"a task listener job of type {jobType}, on the {event} event (Camunda 8.8 or later)","executionListener":"an execution listener job of type {jobType}, on the {event} event (Camunda 8.6 or later)","topic":"a job worker of type {jobType}; the external task handler moves to a Camunda 8 job worker","expression":"a job worker of type {jobType} that makes the call the expression made","class":"a job worker of type {jobType}"},"note":{"businessKey":"It reads the business key. Camunda 8 has none: carry the value as a process variable.","engineServices":"It uses {services}, which a Camunda 8 worker does not have: use the Camunda client, or a message, instead.","readsAllVariables":"It reads every variable. A Camunda 8 worker fetches all variables unless it names the ones it needs."}},"report":{"theProject":"the project","heading":"Camunda 7 to Camunda 8 migration: {name}","onDate":" on {date}","automatic":"{count} more convert unchanged.","needsWork":"Needs work","reviewAfter":"Review after converting","notInProject":"not in this project","nothingToMigrate":"This project has no Camunda 7 diagrams, decisions or forms: there is nothing to migrate.","scope":"Scope","columnStatus":"Status","columnFiles":"Files","columnMeaning":"Meaning","costs":"What the move costs","blockers":"Blockers","blockersHint":"Camunda 8 has no form for these. Remodel them before converting.","blockerWhere":"in {where} ({path}). {action}","files":"Files","columnFile":"File","columnNeedsWork":"Needs work","columnReview":"Review","columnConverts":"Converts","finding":"{where}: {title}. {action}","code":"Code","codeHint":"What each Java delegate, external task handler and listener becomes. Penstock writes a job worker skeleton beside the code and never over it.","columnValue":"Class, bean or topic","columnWhere":"Where","columnBecomes":"Becomes","columnNotes":"Notes","apis":"Camunda 7 API in the Java code","apisHint":"The rewrite of the code itself is best done in the build, where a reviewer sees the diff: use the OpenRewrite recipes from the Camunda migration guide.","dataMigration":"Running instances and history","findingWhere":"{where}: {title}.","status":{"ready":"Ready","converts":"Converts","needsWork":"Needs work","blocked":"Blocked"},"meaning":{"ready":"nothing to do","converts":"Penstock converts it; the leftovers are a check","needsWork":"a person has to do part of it","blocked":"uses something Camunda 8 has no form for"},"effort":{"workers":"Job workers to write","expressions":"Expressions to rewrite","scripts":"Scripts to replace","listeners":"Listeners to move","forms":"Forms to rebuild or link","calledProcesses":"Called processes to check","decisions":"Decisions called"},"target":"Target: Camunda {target}. Written by Penstock{on}.","targetDated":"Target: Camunda {target}. Written by Penstock{on}.","dataMigrator":"Camunda's Data Migrator: {link}","fileCount":{"one":"{count} file","other":"{count} files"},"apiImports":"{api}: {imports} imports in {files}"},"rules":{"java-class":{"title":"Java class {className} becomes the job type {jobType}","detail":"Camunda 8 does not run Java inside the engine. A service task creates a job, and a job worker in your application picks it up.","action":"Write a job worker for {jobType}; Penstock generates one from the class."},"delegate-expression":{"title":"Delegate {delegate} becomes the job type {jobType}","detail":"Camunda 8 cannot look up a Spring bean. The task creates a job, and a job worker picks it up.","action":"Write a job worker for {jobType}; Penstock generates one from the bean."},"delegate-expression-dynamic":{"title":"The delegate is chosen by the expression {expression}","detail":"The bean is decided while the process runs, and a Camunda 8 job type is fixed or a FEEL expression over variables.","action":"Give the task a job type, or a FEEL expression that picks one from a variable."},"expression":{"title":"The expression {expression} becomes the job type {jobType}","detail":"Camunda 8 cannot call a bean method from the diagram. The call moves into a job worker.","action":"Write a job worker for {jobType} that makes the call {expression} made.","withResult":{"action":"Write a job worker for {jobType} that makes the call {expression} made and completes the job with the variable {result}."}},"expression-unknown":{"title":"The expression {expression} runs code inside the engine","detail":"Camunda 8 evaluates FEEL and nothing else in the diagram, so this expression has no counterpart.","action":"Move what it does into a job worker, or into a FEEL output mapping if it only computes a value."},"external-task":{"title":"The external task topic {topic} becomes the job type {jobType}","detail":"External tasks and jobs are the same idea. The worker changes client: the Camunda 7 external task client becomes a Camunda 8 job worker.","action":"Move the handler for {topic} to a job worker; Penstock generates one from the handler."},"external-task-priority":{"title":"The external task priority is dropped","detail":"Camunda 8 jobs of one type are handed out in the order they are created.","action":"Nothing to do, unless the order mattered; then give urgent work its own job type."},"connector":{"title":"The Camunda 7 connector {connector} has no Camunda 8 counterpart","detail":"Camunda 7 connectors (http-connector, soap-http-connector) are not part of Camunda 8. Camunda 8 has its own connectors, configured through element templates.","action":"Apply the Camunda 8 REST or SOAP connector template to the task, or write a job worker."},"field-injection":{"title":"The injected fields {fields} become task headers","detail":"Camunda 8 has no field injection. Fixed values travel with the job as custom headers, which the worker reads.","action":"Read them in the worker from the job's custom headers."},"field-injection-expression":{"title":"The injected field {field} is an expression","detail":"A task header is a fixed text; it cannot be evaluated while the process runs.","action":"Pass the value as an input mapping with a FEEL expression, and read it in the worker as a variable."},"async":{"title":"Asynchronous continuation is dropped","detail":"Camunda 8 has no transactions spanning steps: every job and every wait is its own unit, so asyncBefore and asyncAfter mean nothing there.","action":"Nothing to do."},"retries":{"title":"The retry cycle {cycle} becomes {retries} retries","detail":"Camunda 8 counts retries on the task; how long to wait between them is decided by the worker when it fails the job.","action":"Set the back-off in the worker's fail command if the interval mattered."},"retries-dropped":{"title":"The retry cycle {cycle} is dropped","detail":"Only tasks that create a job carry retries in Camunda 8.","action":"Nothing to do, unless this element relied on retrying; then check how it fails on Camunda 8."},"job-priority":{"title":"The job priority {priority} is carried over","detail":"Camunda 8 has job priorities from 8.8.","action":"Nothing to do."},"job-priority-dropped":{"title":"The job priority {priority} is dropped","detail":"The Camunda 8 version this converts for has no job priorities.","action":"Nothing to do, unless the order mattered; then give urgent work its own job type."},"input-output":{"title":"The input and output mapping becomes a FEEL mapping","detail":"Camunda 8 maps variables with FEEL expressions; each Camunda 7 parameter becomes one.","action":"Nothing to do."},"input-output-manual":{"title":"The mapping of {name} cannot be converted","detail":"{reason}","action":"Write the mapping as a FEEL expression."},"input-output-script":{"title":"The mapping of {name} runs a {format} script","detail":"Camunda 8 maps variables with FEEL only.","action":"Write the mapping as a FEEL expression, or compute the value in a job worker."},"condition":{"title":"The condition {expression} becomes {feel}","detail":"Camunda 8 conditions are FEEL expressions.","action":"Nothing to do."},"expression-review":{"title":"{expression} became {feel}","detail":"{reason}","action":"Check the FEEL expression means the same with the values this process sees."},"expression-manual":{"title":"The expression {expression} cannot be converted","detail":"The converter stopped because {reason}.","action":"Write it as a FEEL expression."},"script-condition":{"title":"The condition is a {format} script","detail":"Camunda 8 conditions are FEEL expressions only.","action":"Write the condition in FEEL."},"script-task":{"title":"The {format} script cannot run in Camunda 8","detail":"Camunda 8 runs a script task as a FEEL expression or as a job. Groovy, JavaScript and Python scripts have no engine to run in.","action":"Rewrite the script as a FEEL expression, or turn the task into a job worker that runs the code."},"script-task-feel":{"title":"The FEEL script becomes a FEEL expression","detail":"Camunda 8 runs a FEEL script task inside the engine, with its result in {variable}.","action":"Nothing to do.","noResult":{"title":"The FEEL script's result goes to {variable}","detail":"Camunda 8 needs a result variable for a FEEL script task, and the Camunda 7 task had none.","action":"Rename {variable} if something should read the result."}},"script-resource":{"title":"The script is read from {resource}","detail":"Camunda 8 does not load scripts from resources.","action":"Rewrite the script as a FEEL expression, or turn the task into a job worker."},"execution-listener":{"title":"The {event} listener {name} becomes the job type {jobType}","detail":"Camunda 8 execution listeners are jobs as well: the process waits until a worker completes them.","action":"Write a job worker for {jobType}; it runs before the element continues, so keep it quick."},"execution-listener-unsupported":{"title":"The {event} listener {name} has no Camunda 8 counterpart","detail":"{reason}","action":"Move what the listener does into a task of its own or into the worker before it."},"task-listener":{"title":"The {event} task listener {name} becomes the job type {jobType}","detail":"Camunda 8 task listeners are jobs that the user task waits for, and they can correct or deny what happens.","action":"Write a job worker for {jobType}."},"task-listener-unsupported":{"title":"The {event} task listener {name} has no Camunda 8 counterpart","detail":"{reason}","action":"Move what the listener does into a job worker around the task, or into the application that works the task."},"user-task":{"title":"The user task becomes a Camunda user task","detail":"Camunda 8 manages the task in the engine, with its assignee, candidates, dates and priority.","action":"Nothing to do in the diagram; the task list application changes to Tasklist or to the Camunda 8 user task API."},"user-task-expression":{"title":"The {name} {expression} became {feel}","detail":"{reason}","action":"Check the value on Camunda 8."},"user-task-priority-range":{"title":"The priority {priority} is outside 0 to 100","detail":"Camunda 8 user task priorities run from 0 to 100.","action":"Rescale the priority."},"user-task-priority-dropped":{"title":"The priority {priority} is dropped","detail":"The Camunda 8 version this converts for has no user task priority.","action":"Nothing to do, unless the task list sorted by it."},"form-embedded":{"title":"The embedded form {formKey} has no Camunda 8 counterpart","detail":"Camunda 8 Tasklist shows Camunda Forms only; HTML forms and their JavaScript do not carry over.","action":"Rebuild the form as a Camunda Form and link it, or keep your own task list application and pass the key as an external reference.","here":{"title":"The form key {formKey} has no Camunda 8 counterpart here"}},"form-generated":{"title":"The generated form becomes the Camunda Form {form}","detail":"Penstock writes a Camunda Form with one field per form field, and links it. Validation and properties the form fields had are carried over where Camunda Forms have them.","action":"Open {form} and check it looks and validates as the old one did."},"form-generated-partly":{"title":"Part of the generated form did not carry over: {lost}","detail":"Camunda Forms have no counterpart for it.","action":"Rebuild that part in the form editor."},"form-camunda":{"title":"The Camunda Form {form} is linked by its id","detail":"Camunda 8 links a form by its id and deploys it with the diagram.","action":"Deploy the form with the diagram."},"form-camunda-unknown":{"title":"The Camunda Form {form} was not found in the project","detail":"Camunda 8 links a form by the id inside it, and Penstock could not read that id. The file name was used instead.","action":"Check the form id in the diagram matches the id inside the form."},"form-binding-version":{"title":"The form is bound to version {version}","detail":"Camunda 8 binds a form by latest, by deployment or by version tag, not by version number.","action":"Bind it by deployment or give the form a version tag."},"form-external":{"title":"The form key {formKey} becomes an external reference","detail":"Camunda 8 passes an external reference through to the task list, as Camunda 7 passed the form key.","action":"Check your task list application reads the external reference."},"assignment-review":{"title":"The {name} {expression} is a list in Camunda 7","detail":"Camunda 8 wants candidates as a FEEL list or a comma-separated text.","action":"Check the expression gives a list or a comma-separated text."},"initiator":{"title":"The starter is kept in {variable} only in Camunda 7","detail":"Camunda 8 does not record who started an instance in a variable.","action":"Set {variable} as a variable when the process is started."},"multi-instance":{"title":"The multi-instance loop over {collection} becomes an input collection","detail":"Camunda 8 loops over an input collection, with each item in the input element.","action":"Nothing to do."},"multi-instance-cardinality":{"title":"The loop cardinality {cardinality} becomes a collection of numbers","detail":"Camunda 8 has no loop cardinality: it loops over a collection. The converter loops over the numbers 1 to {cardinality}.","action":"Check the loop runs as often as it did."},"multi-instance-missing":{"title":"The multi-instance loop has neither a collection nor a cardinality","detail":"Camunda 8 needs an input collection to loop over.","action":"Give the loop an input collection."},"call-activity":{"title":"The call of {process} carries over","detail":"Camunda 8 calls the process by its id; the variables passed in and out become mappings.","action":"Nothing to do."},"call-activity-business-key":{"title":"The business key is passed to {process}","detail":"Camunda 8 has no business key.","action":"Pass the value as a variable, and correlate messages on it."},"call-activity-local":{"title":"Only local variables were passed to or from {process}","detail":"Camunda 8 passes the variables its mappings name; it has no local-only mode.","action":"Check the mappings pass exactly what the called process needs."},"call-activity-mapping-class":{"title":"Variables for {process} are mapped by Java code","detail":"Camunda 8 maps variables with FEEL only.","action":"Write the mapping as FEEL input and output mappings."},"binding-version":{"title":"{what} is bound to version {version}","detail":"Camunda 8 binds by latest, by deployment or by version tag, not by version number.","action":"Bind it by deployment, or give the target a version tag and bind by that."},"binding-dropped":{"title":"The binding {binding} of {target} is dropped","detail":"The Camunda 8 version this converts for always takes the latest version.","action":"Convert for 8.6 or later to keep the binding."},"tenant":{"title":"The tenant {tenant} is fixed in the diagram","detail":"Camunda 8 decides the tenant from the deployment, not from the diagram.","action":"Deploy the diagram to the tenant instead."},"cmmn":{"title":"The case {case} is called","detail":"Camunda 8 has no CMMN.","action":"Model the case as a process, an ad-hoc subprocess or a set of user tasks."},"decision":{"title":"The decision {decision} is called, its result in {result}","detail":"Camunda 8 evaluates the decision in the engine and stores the whole result in one variable.","action":"Nothing to do."},"decision-result":{"title":"The decision result was mapped as {mapping}","detail":"Camunda 8 stores the result the way the decision gives it: one value for one output of one rule, a context for several outputs, a list for several rules. The Camunda 7 mapping {mapping} may have a different shape.","action":"Check what reads {result} expects the Camunda 8 shape."},"decision-result-variable":{"title":"The decision result goes to {result}","detail":"Camunda 8 needs a result variable, and the Camunda 7 task had none.","action":"Rename {result} if something else should read the result."},"message-catch":{"title":"The message {message} needs a correlation key","detail":"Camunda 8 correlates a message to a waiting instance by a key the instance computes from its variables. Camunda 7 correlated through the API, with the business key or variables.","action":"Add a correlation key to the message: a FEEL expression over a variable the sender also knows, such as =orderId."},"message-name-expression":{"title":"The message name {name} becomes {feel}","detail":"Camunda 8 message names can be FEEL expressions.","action":"Nothing to do."},"message-throw":{"title":"The message is sent by {implementation}, which becomes the job type {jobType}","detail":"Camunda 8 sends a message from a throw event through a job worker, like a send task.","action":"Write a job worker for {jobType} that publishes the message."},"message-throw-empty":{"title":"The message throw event has no implementation","detail":"Camunda 8 needs a job type on a message throw event; a worker sends the message.","action":"Give the event a job type and write the worker that publishes the message."},"signal-variables":{"title":"Variables passed with the signal {signal}","detail":"Camunda 8 broadcasts a signal with the variables its input mappings give it.","action":"Check the signal carries the variables its catchers read."},"timer":{"title":"The timer {timer} carries over","detail":"Camunda 8 reads the same ISO 8601 dates, durations and cycles.","action":"Nothing to do."},"timer-cron":{"title":"The timer cycle {cycle} is a cron expression","detail":"Camunda 8 reads cron expressions in the Spring format; Camunda 7 read them in the Quartz format, which allows fields Spring does not.","action":"Check the cron expression is valid Spring cron."},"error-code-variable":{"title":"The caught error code goes to {variable} through an output mapping","detail":"Camunda 8 gives a caught error to the output mappings as errorCode and errorMessage.","action":"Nothing to do."},"error-message":{"title":"The error message {message} is dropped","detail":"In Camunda 8 the worker that throws the error gives its message.","action":"Give the message in the worker when it throws the error."},"external-error":{"title":"The external task decides errors by the expression {expression}","detail":"Camunda 8 has no error event definitions on a task; the job worker throws the error itself.","action":"Throw the BPMN error from the job worker when the condition holds."},"escalation-code-variable":{"title":"The escalation code was kept in {variable}","detail":"Camunda 8 does not store a caught escalation code in a variable.","action":"Pass the value as a variable when the escalation is thrown."},"unsupported-element":{"title":"Camunda 8 cannot run a {what}","detail":"{reason}","action":"{action}"},"element-since":{"title":"A {what} needs Camunda {version} or later","detail":"The Camunda 8 version this converts for, {target}, cannot run it.","action":"Convert for Camunda {version} or later, or remodel it."},"conditional-event":{"title":"The conditional event waits for {variables}","detail":"Camunda 8 evaluates a condition when the variables it names change, like Camunda 7 did when variableName was set.","action":"Check the condition is triggered by the variables you expect."},"properties":{"title":"The extension properties carry over","detail":"Camunda 8 keeps them as zeebe properties, read the same way by tools.","action":"Nothing to do."},"version-tag":{"title":"The version tag {tag} carries over","detail":"Camunda 8 keeps version tags from 8.6.","action":"Nothing to do.","dropped":{"title":"The version tag {tag} is dropped","detail":"Camunda 8 keeps version tags from 8.6."}},"history-time-to-live":{"title":"The history time to live {ttl} is dropped","detail":"Camunda 8 keeps history in its secondary storage, cleaned up by retention settings of the cluster, not of the diagram.","action":"Set the retention in the cluster configuration if it mattered."},"starter-groups":{"title":"Who may start the process ({groups}) is dropped","detail":"Camunda 8 decides who may start a process through authorizations, not the diagram.","action":"Grant the start permission to {groups} in Camunda 8 identity."},"startable-in-tasklist":{"title":"Whether Tasklist may start the process is dropped","detail":"Camunda 8 Tasklist offers every process a user may start.","action":"Nothing to do."},"template":{"title":"The element template {template} is a Camunda 7 template","detail":"The template no longer applies; the converted properties stay.","action":"Apply the Camunda 8 version of the template, if there is one."},"unknown-attribute":{"title":"The Camunda 7 setting {attribute} is left as it is","detail":"Penstock does not know what Camunda 8 should do with it, so it stays in the diagram, where Camunda 8 ignores it.","action":"Check whether anything depended on it, then remove it."},"dmn-version":{"title":"The decisions are DMN {version}","detail":"Camunda 8 reads DMN 1.3. Penstock and the DMN editor move an older file to 1.3.","action":"Open the file in the DMN editor and save it, then convert it.","converted":{"detail":"Camunda 8 reads DMN 1.3, so the file is written as DMN 1.3.","action":"Nothing to do."}},"dmn-expression-language":{"title":"{what} is written in {language}","detail":"Camunda 8 evaluates DMN in FEEL only.","action":"Write it in FEEL."},"dmn-juel":{"title":"{what} becomes the FEEL expression {feel}","detail":"Camunda 8 evaluates DMN in FEEL only.","action":"Nothing to do."},"dmn-input-variable":{"title":"The input {input} names its value {variable}","detail":"Camunda 8 refers to the input value in a rule as ?, not by a name.","action":"Replace {variable} with ? in the rules of this input, then remove the name."},"dmn-history-time-to-live":{"title":"The history time to live of {decision} is dropped","detail":"Camunda 8 keeps history in its secondary storage, cleaned up by retention settings of the cluster.","action":"Nothing to do."},"dmn-carries-over":{"title":"The decisions carry over","detail":"Camunda 8 evaluates DMN 1.3 in FEEL, and these decisions use nothing else.","action":"Nothing to do."},"form-platform":{"title":"The form carries over","detail":"Camunda Forms have the same format on both; only the platform it names changes.","action":"Nothing to do."},"platform":{"title":"The diagram names Camunda {target} as its platform","detail":"Camunda Modeler and Penstock read the platform from the file.","action":"Nothing to do."},"data-migration":{"title":"Running instances and history stay on Camunda 7","detail":"Converting a diagram does not move its instances. Instances can finish on Camunda 7, or be moved with Camunda's Data Migrator, which needs the element ids to stay as they are; the converter keeps them.","action":"Decide whether to drain Camunda 7 or to run the Data Migrator."}},"dmn":{"savedAsNotice":"{name} is a DMN {from} file. It was converted to DMN 1.3 and will be saved as DMN 1.3 when you change it."},"form":{"keptOut":"{name} on {id}","lostType":"type {type} of {id}"},"tally":{"toDo":{"one":"{count} to do","other":"{count} to do"},"toCheck":{"one":"{count} to check","other":"{count} to check"},"converts":{"one":"{count} convert unchanged","other":"{count} convert unchanged"}},"selection":{"refused":{"unknown":"These ids are not in the migration plan: {ids}","too-many":"The selection lists too many ids (the limit is 20000). Nothing was written.","too-long":"An id in the selection is empty or longer than 1024 characters. Nothing was written.","empty":"The list of ids to accept is empty, so there is nothing to apply. Nothing was written."},"unsafeFile":"The saved selection is not a plain file inside the project, so it was not read.","tooBig":"The saved selection is too large to read.","unreadable":"The saved selection is not a valid Penstock selection file, so it was ignored."},"risk":{"automatic":"Converted automatically","changed":"Converted, meaning changed","person":"Needs a person","left":"Left as is"},"proof":{"verdict":{"equivalent":"EQUIVALENT","differs":"DIFFERS","notComparable":"NOT COMPARABLE"},"side":{"original":"Original (Camunda 7)","converted":"Converted (Camunda 8)"},"reason":{"left-as-is":"Element {element} was left as is by the conversion: {detail}","needs-person":"Element {element} needs a person to finish its conversion: {detail}","element-removed":"Element {element} no longer exists in the converted diagram.","delegate-unavailable":"Element {element} calls a Java delegate that cannot run on both engines without a mock for it.","run-failed":"The scenario could not be run: {detail}","unreadable-case":"The scenario file could not be read: {detail}","unreadable-trace":"A run trace could not be read, so nothing can be compared: {detail}","no-diagram":"The diagram for this scenario file was not found.","no-converted":"There is no converted diagram for this scenario file.","executable-not-confirmed":"The conversion adds executable content and it was not confirmed.","cancelled":"The run was cancelled.","unrunnable":"The scenario cannot be run on a test engine: {detail}"},"divergence":{"element":"Step {index}: the original goes to {original}, the converted one to {converted}.","outcome":"The original ended as {original}, the converted one as {converted}. {message}","state":"The original finished in state {original}, the converted one in state {converted}.","incident":"Incidents differ: original {original}; converted {converted}.","variable":"Variable {name}: original {original}, converted {converted}."},"noValue":"(not set)","noTrace":"(no trace)","theEnd":"(the end)","none":"none","hiddenNames":"values hidden for: {names}","totals":"{equivalent} equivalent, {differs} differ, {notComparable} not comparable","orderNote":"Parallel branches ran in a different order; the order was not compared.","originalTrace":"Original trace","convertedTrace":"Converted trace","defaultProfile":"default profile","caseFileUnreadable":"the file could not be read","idMapUnreadable":"the conversion could not be mapped element by element","unreadableFile":"a file that could not be inspected","refused":"Nothing was run.","ranUnreviewed":"Ran with {count} added executable item(s) that you chose not to review first.","noScenarios":"No scenarios were found to run.","freePreview":"Free preview: {shown} of {total} scenarios were run.","skippedFile":"Skipped {file}: it is a symbolic link or outside the project.","refusal":{"noEngine":"No engine is set up for the {side} diagram (profile: {profile}).","wrongFamily":{"original":"The engine {engine} is not a Camunda 7 family engine (Camunda 7, Operaton, CIB seven), so it cannot run the original diagram.","converted":"The engine {engine} is not a Camunda 8 engine, so it cannot run the converted diagram."},"notForTests":"The {side} engine ({where}) is not marked for tests (deployment.forTests: true), so nothing is run on it. Shared and production engines are never used.","sameEngine":"Both profiles point at the same engine; the original and the converted diagram need one each.","needConverted":"Name the profile of the Camunda 8 test engine (--converted-profile).","nothing":"There is nothing to convert and compare in this project.","executable":"The conversion adds executable content that the original did not have: {list} ({count} in all). Nothing was run.","executableHint":"Review what was added, then run again with --run-unreviewed (or the button in the Migration workspace) to confirm that you accept running it on the test engine."}},"workspace":{"title":"Migration workspace","help":"Every change the conversion to Camunda 8 would make, per file and per element, with what it is now, what it becomes and why. Tick the ones to accept. Nothing is written until you choose Apply selected.","loading":"Reading the project…","failed":{"title":"The migration plan could not be made","hint":"Check that the project folder can be read, then reopen this screen."},"empty":{"title":"Nothing to migrate","hint":"The project has no Camunda 7 diagrams, decisions or forms left to convert."},"summary":"{accepted} of {total} changes accepted. About {hours} h of work left by hand.","acceptAll":"Accept all","rejectAll":"Reject all","save":"Save selection","apply":"Apply selected","saved":"Selection saved in .penstock/migration-selection.json.","saveFailed":"The selection could not be saved.","outcome":{"applied":"The accepted changes were written.","cancelled":"Nothing was written.","locked":"Writing the migration is part of Penstock Pro. Nothing was written.","nothing":"The accepted changes leave nothing to write.","refused":"Nothing was written; a file changed or could not be replaced."},"kind":{"element":"Element","file":"Whole file","create":"New file","config":"Project settings"},"before":"Before","after":"After","accept":"Accept the change to {name}","acceptFile":"Accept every change in {file}","open":"Show {name} in the diagram","noChanges":"Nothing is rewritten here; it stays as it is and needs your attention.","proof":{"title":"Run the same scenarios on both engines","help":"Runs the saved scenarios of the project on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and compares what happened. Only engines marked for tests are used.","noEngines":"Mark a Camunda 7 engine and a Camunda 8 engine for tests in penstock.yaml (deployment.forTests: true) to compare them here.","originalEngine":"Camunda 7 test engine","convertedEngine":"Camunda 8 test engine","scenarios":"Scenario files (optional)","run":"Run the same scenarios","stop":"Stop","running":"{count} scenarios compared so far","failed":"The run stopped: {reason}","executable":{"title":"The conversion adds executable content","run":"Run it anyway on the test engine"},"ranUnreviewed":"Ran with executable content added by the conversion, as you confirmed.","unlock":"Unlock all scenarios"}}},"notifications":{"closeNotification":"Close notification"},"platform":{"theConversionPreviewStayedUnanswered":"The conversion preview stayed unanswered for {seconds} seconds, so Penstock stopped asking and converted nothing.","theConversionPreviewWasGiven":"The conversion preview was given up before the user answered, so Penstock converted nothing.","theHostConnectionIsClosed":"The host connection is closed","theIdeAnswered":"The IDE answered {status}","theRequestWasCancelled":"The request was cancelled"},"problems":{"waiting":"Waiting for a diagram to check.","tally":{"one":"{count} problem","other":"{count} problems"}},"project":{"applied":"Migration applied: {rewritten} files rewritten, {created} created, {manual} need a person. MIGRATION.md has the list.","applyChanged":"{file} changed since it was read","applyDecline":"Cancel","applyAccept":"Apply","applyText":"This rewrites {rewritten} files in place and creates {created} files, among them the job worker skeletons and MIGRATION.md. {converted} elements are converted and {manual} need a person afterwards. Nothing is deleted. Commit first so the change can be undone.","applyTitle":"Apply the migration for Camunda {target}","applyNothingToWrite":"Nothing to apply: the Camunda 7 files here are already converted.","chooseCamunda7Camunda8":"Choose Camunda 7, Camunda 8, Operaton or CIB seven as the engine in penstock.yaml to deploy","filesReplaced":{"one":"{count} file replaced.","other":"{count} files replaced."},"isBesideTheDelegateMove":"{fileName} is beside the delegate; move what {value} does into it.","isNotACamunda7":"{name} is not a Camunda 7 file: there is nothing to convert.","noJobWorkerWasFound":"No job worker was found for {asked}.","notRunTheEngineWas":"Not run: the engine was not confirmed for tests","nothingWasWritten":"Nothing was written: {failure}","penstockWillDeployATest":"Penstock will deploy a test build to {url}, start instances and answer the jobs it mocks. ","runScenariosOnThisEngine":"Run scenarios on this engine?","startFromAnExample":"Start from an example","templateUpdated":"The element template for {value} was brought up to date from {where} in {path}.","templateWritten":"The element template for {value} was written from {where} to {path}.","theBuildAndItsInstances":"The build and its instances are removed after each run. Mark the profile with deployment.forTests: true to stop being asked.","theElementTemplateForAlready":"The element template for {value} already says what {where} does.","theElementTemplateIsNot":"The element template {id} is not in this project any more.","theExampleIsInIts":"The {example} example is in {root}. Its README.md says how to run it.","theExampleWasNotWritten":"The example was not written: {failure}","theJobWorkerWasNot":"The job worker was not written: {failure}","theMigrationReportIsIn":"The migration report is in .penstock/migration: report.md, and report.html to hand on.","theWorkerSkeletonWasNot":"The worker skeleton was not written: {failure}","thereIsNothingToMigrate":"There is nothing to migrate: no Camunda 7 diagram, decision or form was found.","thingsStayOpen":{"one":"{count} thing stays open, marked on its element; the Camunda 7 file is unchanged.","other":"{count} things stay open, each marked on its element; the Camunda 7 file is unchanged."},"wasConvertedForCamundaInto":"{name} was converted for Camunda {target} into {folder}.","wasWrittenForInMove":"{fileName} was written for {name} in {inside}. Move what it should do into it.","writeTheOrderExampleInto":"Write the {example} order example into {root}? It adds a process, a decision, a form, workers, test cases and a README, and never overwrites a file.","couldNotBeRead":"{name} could not be read: {reason}","notADiagramDecisionOrForm":"it is not a diagram, decision or form","alreadyThere":{"one":"{files} is already there; choose to replace it or another folder","other":"{files} are already there; choose to replace them or another folder"},"theCursorIn":"the cursor in {file}","theJobType":"the job type {value}","engine":{"CAMUNDA_8":"Modern cloud-native process automation platform","OPERATON":"Community-driven BPMN automation platform","CIB_SEVEN":"Community fork of Camunda 7","CAMUNDA_7":"Proven workflow and decision automation platform","CLASSIC_BPMN":"Standard BPMN 2.0 modeling without engine-specific extensions"},"scriptType":{"noScriptTypeSelected":"No script type selected","groovyScriptingLanguage":"Groovy scripting language","javaScriptScriptingLanguage":"JavaScript scripting language","Groovy":"Groovy","JavaScript":"JavaScript"},"noScriptType":"<empty>"},"properties":{"calledElement":"Called element","dataObject":"Data object","editInNewTab":"Edit in new tab","exampleOutputWritten":"Example output written","idOfTheProcessTo":"Id of the process to call","isACollection":"Is a collection","leaveEmptyForTheEngine":"Leave empty for the engine default","loopCondition":"Loop condition","loopMaximum":"Loop maximum","loopMaximumWholeNumber":"The loop maximum should be a whole number","testBefore":"Test before","tryOnInstance":"Try on instance","writeExampleOutput":"Write example output","writeThisAsTheExample":"Write this as the example output, where Camunda Modeler reads it","readingWhatReachesThisStep":"Reading what reaches this step","nothingReachesThisStep":"Nothing reaches this step, so there is no example output to write.","anyValue":"any","pickAnInstanceToRunThis":"Pick an instance in the Monitor tab to run this on its variables.","projectVariable":"Used in the project","sevenCannotEvaluate":"Camunda 7 cannot evaluate an expression. It needs Camunda 8.9 or newer.","showScriptTab":"Show tab","scriptInTab":"This script is open in a tab"},"runs":{"adHocRun":"Ad-hoc run {time}","addAScenarioWithChosen":"Add a scenario with chosen inputs","addScenario":"Add scenario","addTheVariablesTheScenario":"Add the variables the scenario starts with.","addWhichAGatewayCondition":"Add {name}, which a gateway condition reads","backTo":"Back to {value}","buyOrSignIn":"Buy or Sign In","changed":"Changed","checkAtTheEnd":"Check at the end","choice":{"job":{"ask":"Ask me","complete":"Complete","error":"Throw error","fail":"Fail, then complete","real":"Real worker"},"timer":{"fire":"Fire now","real":"Wait for it"}},"chooseAProcess":"Choose a process","chooseTheValuesThatTake":"Choose the values that take the way you want. The gateways read {names}.","conditionOf":"Condition of {name}","create":"Create","createScenarios":"Create scenarios","createThisScenario":"Create this scenario","decisionRule":"Decision rule","enterANameForThe":"Enter a name for the scenario","enterTheErrorCodeShould":"Enter the error code {name} should throw","enterTheKeyOrId":"Enter the key or id of a process instance","errorCode":"Error code","fillTheForm":"Fill the form","answerTimer":"Answer timer","mockWorker":"Mock worker","fireTimer":"Fire timer","advanceTimeBy":"Advance time by","timerFired":"Timer is set to fire","timerDurationProblem":"Write the time as an ISO 8601 duration, such as PT2H or P1D","removeTimerAnswer":"Do not fire","workerOutcome":"Outcome","completeJob":"Complete job","throwBpmnError":"Throw BPMN error","failJob":"Fail job","workerVariables":"Variables (JSON)","errorMessage":"Error message","saveMock":"Save mock","removeMock":"Remove mock","invalidJson":"The variables should be a JSON object, such as {\\"amount\\": 150}","generate":"Generate","in":"In","include":"Include {name}","kind":{"call":"Call","decision":"Decision","delegate":"Delegate","end":"End","error":"Error","eventGateway":"Wait","gateway":"Gateway","join":"Join","message":"Message","parallel":"Split","signal":"Signal","start":"Start","subprocess":"Sub-process","task":"Task","timer":"Timer","user":"User task","worker":"Worker"},"leaveItEmptyToName":"Leave it empty to name the scenario after its way.","mocked":"Mocked","name":"Name","nameOfTheScenario":"Name of the scenario","nextStep":"Next step","noDecisionTableWithId":"No decision table with the id {id} is in this project","noFormWithTheId":"No form with the id {id} is in this project","noScenarioFile":"No scenario file","noScenariosAdded":"No scenarios added.","notTakenByThisScenario":"Not taken by this scenario","openRun":"Open run","out":"Out","penstockCannotCheckThisExpression":"Penstock cannot check this expression here","penstockFailed":"Penstock failed: {message}","previousStep":"Previous step","process":"Process","processInstance":"Process instance","removeVariable":"Remove {name}","resizeTheRunsPanel":"Resize the runs panel","reviewScenarios":"Review scenarios","run":"Run","runOutput":"Run output","runWithInput":"Run with input","runningNeedsAnEngineSet":"Running needs an engine. Set up the deployment profile in force.","saveAsScenario":"Save as scenario","scenariosIn":"Scenarios in {file}","scenariosNeedAnEngine":"Scenarios need an engine.","scenariosRunACamunda7":"Scenarios run a Camunda 7 or Camunda 8 process on an engine and follow every step. This diagram has no engine set.","scenariosToCreate":"Scenarios to create","source":{"decision":"from the decision evaluation","diff":"changed between two readings; the engine does not say which step wrote it","history":"from the engine history","mock":"sent or received by the mock"},"startVariables":"Start variables","startsAt":"Starts at","state":{"completed":"completed","active":"waiting","failed":"failed","terminated":"ended early"},"step":"Step","stepBadge":"Step {number}: {name}","steps":"Steps","theDiagramHasNoExecutable":"The diagram has no executable process to start","theKeyOfACamunda":"The key of a Camunda 8 instance or the id of a Camunda 7 one. Reads the instance from the engine of the profile in force and shows its path and steps. Nothing is changed on the engine.","thePlainStartEvent":"The plain start event","theRunDiffersFrom":{"one":"The run differs from {against} in 1 place.","other":"The run differs from {against} in {count} places."},"theRunMatches":"The run matches {against}.","theRunWaits":"The run waits","theScenarioAnsweredThisStep":"The scenario answered this step; no real code ran","theScenarioAsItIs":"The scenario as it is written","theScenarioStartsTheProcess":"The scenario starts the process with the same variables, answers the steps the way you did and checks the path the run took.","theScenarioStartsTheProcessInto":"The scenario starts the process with the same variables, answers the steps the way you did and checks the path the run took. It goes into {file}.","theStartVariablesShouldBe":"The start variables should be a JSON object, such as {\\"amount\\": 150}","theVariable":"the variable","theVariablesSendsShouldBe":"The variables {name} sends should be a JSON object","theWayThisScenarioTakes":"The way this scenario takes","theseValuesTake":"These values take: {scenario}","timesToFail":"Times to fail","toFillIn":"To fill in","unableToSaveTheScenario":"Unable to save the scenario","unableToWrite":"Unable to write {name}: {error}","theScenarioFile":"the scenario file","unreadable":"The diagram cannot be read right now, so its scenarios cannot be planned.","userTasksAndMessagesAsk":"User tasks and messages ask you when the run reaches them. A mocked step is marked Mocked: no real code ran there.","valueOf":"Value of {name}","variableName":"Variable name","variablesAreAJsonObject":"Variables are a JSON object, such as {\\"approved\\": true}","variablesSends":"Variables {name} sends","view":"View","whatDoes":"What {name} does","withErrorCode":"with error code","writeThisScenarioToThe":"Write this scenario to the file when you press Create scenarios","conditionsOnTheWayOut":"Conditions on the way out","goToTheWorker":"Go to the worker","showTheDecisionRule":"Show the decision rule","openTheDecision":"Open the decision","goToTheForm":"Go to the form","received":"Received","variablesToSend":"Variables to send","correlate":"Correlate","throwError":"Throw error","stop":"Stop","runAll":"Run all","close":"Close","log":"Log","penstockOnlyCamundaProcessTestWould":"Penstock only: Camunda Process Test would run it differently","alreadyInTheFileKeptAs":"Already in the file: kept as it is","added":"Added","text":"Text","saveChanges":"Save changes","generateThemFromTheDiagram":"Generate them from the diagram","openScenario":"Open scenario","scenarios":"Scenarios","addAValue":"Add a value","saveAsScenarioMore":"Save as scenario…","theJob":"the job {job}","theUserTask":"the user task","theMessage":"the message {message}","theSignal":"the signal {signal}","waitingAtFor":"Waiting at {where} for {what}","aScenarioIsOpen":"A scenario is open in the sidebar","noConditionAlwaysTaken":"no condition: this branch is always taken when it is reached","chooseVariablesSoThat":"choose variables so that {text}","trueOrFalseForTheValues":"{result} for the values of this scenario{used}","true":"true","false":"false","shouldFailAWholeNumberOfTimes":"{name} should fail a whole number of times, at least once","toCreate":"{ticked} of {items} to create","cannotBePlanned":{"one":", {count} cannot be planned","other":", {count} cannot be planned"},"moreWaysThanShown":{"one":"More than {count} ways lead through this process: the scenarios below together reach every flow.","other":"More than {count} ways lead through this process: the scenarios below together reach every flow."},"scenariosAdded":{"one":"{count} scenario added","other":"{count} scenarios added"},"toFillInCount":{"one":"{count} to fill in","other":"{count} to fill in"},"alreadyThereAndKept":{"one":"{count} already there and kept","other":"{count} already there and kept"},"leftAsItIs":"{file}: the file is left as it is: {problems}","scenariosSaved":{"one":"{count} scenario saved","other":"{count} scenarios saved"},"nameTaken":"{name} already has a scenario named \\"{scenario}\\": choose another name","errorNeedsItsCode":"A BPMN error needs its error code","complete":"Complete","broadcast":"Broadcast","runWithInputMore":"Run with input…","openRunMore":"Open run…","runAllIsOff":"Run all is off: {reason}","noEngineToRunOn":"there is no engine to run on.","noScenariosToRunYet":"There are no scenarios to run yet. Generate them in the Scenarios tab of the sidebar.","theTraceIsKeptIn":"The trace is kept in {path}","openARunMore":"Open a run…","theFile":"the file","notOnThisScenariosPath":"That element is not on this scenario's path.","planningTheScenarios":"Planning the scenarios…","noWayThroughAProcess":"No executable process here has a way through it that starts at a plain start event.","hideTheConditions":"Hide the conditions","fixTheConditions":"Wrong way? Fix the conditions","readOnlyEditingIsPro":"Read-only: editing a scenario is part of Penstock Pro.","aChangeIsMadeInThe":"A change is made in the diagram, can be undone there, and every scenario is planned again.","defaultFlowNoCondition":"default flow, no condition","decisionTableNotInProject":"The decision table {id} is not in this project, so its rules cannot be shown.","formNotInProject":"The form {id} is not in this project, so its fields cannot be shown.","openTheDecisionIn":"Open the decision in {file}","itsFile":"its file","problemCount":{"one":"1 problem","other":"{count} problems"},"startedByAnEvent":" (started by an event)","notice":{"added":{"one":"{count} scenario added","other":"{count} scenarios added"},"toFillIn":"{count} to fill in","kept":"{count} already there and kept","leftAsIs":"{file}: the file is left as it is: {problems}","saved":{"one":"{count} scenario saved","other":"{count} scenarios saved"},"duplicated":"Duplicated as {name}","deleted":"Deleted {name}","renamedTo":"Renamed to {name}"},"stateColumn":"State","noScenariosHint":"A scenario runs the process with the input you choose and checks the path it takes.","scenarioActions":"Scenario actions","rename":"Rename","duplicate":"Duplicate","deleteScenario":"Delete scenario","deleteScenarioTitle":"Delete scenario {name}?","deleteScenarioText":"{name} is removed from {file}. This cannot be undone."},"share":{"couldNotShareThisDiagram":"Could not share this diagram: {failure}","oneFileThatOpensOffline":"One file that opens offline in any browser","savedItOpensOfflineIn":"Saved {target}. It opens offline in any browser.","shareAsHtml":"Share as HTML","zoomIn":"Zoom in","zoomOut":"Zoom out","fitToScreen":"Fit to screen","madeWith":"Made with Penstock","elementDocumentation":"Element documentation","clickAnElement":"Click an element for its documentation. Scroll to zoom, drag to pan.","noDocumentation":"No documentation.","couldNotBeDrawn":"The diagram could not be drawn, so there is nothing to share."},"shortcuts":{"group":{"Canvas":"Canvas","Edit":"Edit","Modeling":"Modeling","Penstock":"Penstock"},"noMatch":"Nothing matches that.","noMatchHint":"Clear the search to see every shortcut again.","row":{"canvas-find":"Find in the diagram","canvas-fit":"Fit diagram","canvas-moveSelection":"Move the selection","canvas-pan":"Pan the canvas","canvas-selectAll":"Select all elements","canvas-zoomIn":"Zoom in","canvas-zoomOut":"Zoom out","edit-copy":"Copy","edit-cut":"Cut","edit-duplicate":"Duplicate","edit-paste":"Paste","edit-redo":"Redo","edit-remove":"Delete the selection","edit-undo":"Undo","model-connect":"Connect","model-direct-edit":"Edit a label","model-hand":"Hand tool","model-lasso":"Lasso select","model-replace":"Replace an element","model-space-tool":"Space tool","penstock-palette":"Find action"},"search":"Search actions and keys","title":"Keyboard shortcuts"},"sidebar":{"backTo":"Back to {title}","clickOrPressF2To":"{title} - click or press F2 to rename","collapseTheSidebar":"Collapse the sidebar","collapsedLabel":"{title}, collapsed","openTheSidebar":"Open the sidebar","pressF2OrEnterTo":"{title}. {label}: press F2 or Enter to rename","resizeTheSidebar":"Resize the sidebar","sidebar":"Sidebar","tab":{"code":"Code","comments":"Comments","monitor":"Monitor","preview":"Preview","problems":"Problems","properties":"Properties","scenarios":"Scenarios","try":"Try","debug":"Debug","chat":"Chat","aiagents":"Agents","tests":"Tests"},"findingCount":{"one":"{count} finding","other":"{count} findings"},"moreThan99Findings":{"one":"more than 99 finding","other":"more than 99 findings"},"status":{"working":"Agent working","waiting":"Waiting for you"},"moreTabs":"More tabs"},"startup":{"retryingReloadsTheEditorAnd":"Retrying reloads the editor and reads the project again.","theEditorCouldNotStart":"The editor could not start"},"toolbar":{"moreActions":"More actions","moreActionsHint":"More actions ({shortcut})","moreWaysTo":"More ways to {title}"},"nudges":{"price":"{monthly} a month or {yearly} a year","trialEnded":{"text":"Your Pro trial ended. Penstock Free continues, with no time limit, and nothing is lost: your diagrams and files are untouched. Locked until you go Pro: {features} and the other Pro tools. Pro is {price}.","start":"Start with Pro","later":"Remind me later"},"lastDay":{"text":"Last day of your Pro trial. Tomorrow the Pro tools lock; your diagrams and everything in Free keep working, with no time limit. Pro is {price}.","start":"Start with Pro"},"day23":{"text":{"one":"Your Pro trial ends in {count} day. After that Penstock stays free, with no time limit; only the Pro tools lock, such as {features}.","other":"Your Pro trial ends in {count} days. After that Penstock stays free, with no time limit; only the Pro tools lock, such as {features}."},"action":"See Pro plans"},"freeNotice":{"text":"Penstock is free, with no time limit. The editors, Check, Deploy, Monitor, sharing and importing, and the Camunda 7 to 8 analysis stay free, and so does the visual diagram diff in version control. Pro adds tools that are new: {features} and the other Pro tools. {trial}","trialRunning":"Your {days}-day Pro trial is running.","trialEnded":"Your Pro trial has ended; Free continues.","action":"See what's Pro"},"trialWelcome":{"lead":{"one":"Try every Pro feature free for {count} day.","other":"Try every Pro feature free for {count} days."},"text":"{lead} Penstock Free stays free, with no time limit: the editors, Check, Deploy, Monitor and the rest of Free keep working after the trial, and nothing is lost. If you like Pro, you can subscribe at any time.","action":"See Pro plans"}},"tour":{"check":{"body":"The check runs as you draw. Check opens what it found: the first findings are in a card at the bottom right, and the full list is on the Problems tab.","title":"Check"},"deploy":{"body":"Deploy sends the diagram to your engine. {profiles}","title":"Deploy"},"done":"Done","label":"Tour of the editor","more":{"body":"Every action is in More, and {shortcut} opens the same list. Type to find one; the pin puts an action on the toolbar. The tour can be shown again from here.","title":"More"},"next":"Next","palette":{"body":"Pick a shape here and drop it on the canvas, or select a shape and use the pad that appears beside it.","title":"Palette"},"profileChoice":"The arrow next to it picks another profile, or opens the connection.","properties":{"body":"Select a shape and its properties open here: name, implementation, inputs and outputs. The sidebar has eight more tabs beside it, and the last button on the toolbar hides them all.","title":"Properties panel"},"singleProfile":"It opens the connection when the engine has none yet.","skip":"Skip","step":"Step {index} of {total}","tool-window":{"body":"The Penstock tool window is on the stripe at the side of the IDE. It lists the processes, workers, element templates, messages, decisions and forms of the whole project.","title":"Tool window"}},"tracePaths":{"closeTrace":"Close trace","followMessageFlows":"Follow message flows","tracePaths":"Trace paths","tracingBeforeAfter":"Tracing {label} - {before} before, {after} after"},"transactionBoundaries":{"transactionBoundaryTheEngineCommits":"Transaction boundary: the engine commits here"},"try":{"aggregated":", {aggregation} of the matches","aggregation":{"COUNT":"Count","MAX":"Largest","MEAN":"Average","MEDIAN":"Middle","MIN":"Smallest","MODE":"Most often","SUM":"Sum"},"policy":{"ANY":"Any: several rules may match if they give the same result","COLLECT":"Collect: every matching rule contributes","FIRST":"First: the first matching rule wins","OUTPUT ORDER":"Output order: every matching rule, by output priority","PRIORITY":"Priority: the matching rule with the highest output priority wins","RULE ORDER":"Rule order: every matching rule, in rule order","UNIQUE":"Unique: exactly one rule may match"},"shouldBe":"{name} should be {wanted}","aValueOf":"a {type}","value":"value","aNamePenstockCanRead":"a name Penstock can read","penstockCannotEvaluateHere":"{why}; Penstock cannot evaluate this cell here: {cells}","needsAValueFor":"needs a value for {names}","tableNeeds":"{table} {skipped}","tableNeedsAValueFor":"{table} needs a value for {names}","cannotEvaluateTheseCells":"Penstock cannot evaluate this cell here: {cells}","noRuleWasCompared":"{table}: {names}, so no rule was compared"},"unreadable":{"note":{"decision":"The file was not changed. Fix the XML in the Text tab and the decision opens again.","diagram":"The file was not changed. Fix the XML in the Text tab and the diagram opens again.","form":"The file was not changed. Fix the JSON in the Text tab and the form opens again."},"open":{"decision":"Open the XML","diagram":"Open the XML","form":"Open the file"},"title":{"decision":"This decision cannot be opened","diagram":"This diagram cannot be opened","form":"This form cannot be opened"},"atLine":"{reason} at line {line}.","reason":{"unclosedTag":"unclosed tag","closingTagMismatch":"closing tag mismatch","closeTag":"close tag","missingStartTag":"missing start tag","missingOpenTag":"missing open tag","unexpectedEndOfFile":"unexpected end of file","unclosedCdata":"unclosed cdata","unclosedComment":"unclosed comment","unclosedQuestion":"unclosed question","illegalFirstCharNodeName":"illegal first char nodeName","illegalValueOfXmlnsXml":"illegal value of xmlns:xml","invalidNodeName":"invalid nodeName","missingNamespaceOn":"missing namespace on <{element}>","unparsableContent":"unparsable content <{element}> detected","notYetDrawn":"element {element} referenced by {reference}#{property} not yet drawn","unparsableContentHinted":"unparsable content <{element}> detected; this may indicate an invalid BPMN 2.0 diagram file","noDiagramToDisplay":"the file has no diagram interchange, so there is nothing to draw","empty":"the file is empty"}},"tooltip":{"inputOutputParameters":"Input/Output Parameters","script":"Script","subprocess":"Subprocess","serviceTask":"Service Task","assignment":"Assignment","properties":"Properties","inTheProject":"In the project","in":"IN: {number}","out":"OUT: {number}","inOf":"IN ({number})","outOf":"OUT ({number})","elements":"Elements:","id":"ID:","notSet":"<not set>","implementation":"Implementation","class":"Class","delegate":"Delegate","assignee":"Assignee","groups":"Groups","users":"Users","itemsCount":"[{number} items]"},"dialog":{"exampleHint":"e.g. {example}"},"toolWindow":{"action":{"applyMigration":"Apply the migration in place…","buyOrSignIn":"Buy or Sign In…","checkWorkersOn":"Check Workers on {where}","checkWorkersOnEngines":"Check Workers on the Engines","convertAll":"Convert All…","convertToCamunda8":"Convert to Camunda 8…","copyId":"Copy ID","createElementTemplate":"Create Element Template…","createExample":"Create the Example","createJobWorker":"Create Job Worker…","createNodeWorker":"Create Node Worker…","createPythonWorker":"Create Python Worker…","debugTests":"Debug Tests","deploy":"Deploy","findUsages":"Find Usages in Code","goToImplementation":"Go to Implementation","groupByFiles":"Group by Files","jobWorkerSkeleton":"Job Worker Skeleton…","migrationReport":"Migration Report","nodeWorkerSkeleton":"Node Worker Skeleton…","pythonWorkerSkeleton":"Python Worker Skeleton…","runAllProcessTests":"Run All Process Tests","runTests":"Run Tests","showFolders":"Show Folders","openConnections":"Open the connections map","openMigration":"Review and accept changes"},"codeLinks":{"detail":"what runs each step, its tests and coverage: Penstock Pro","tooltip":"Penstock Pro links the diagrams with the code that runs them: workers, usages, variables and error codes across both, tests run from the diagram and coverage on it"},"count":{"files":{"one":"{count} file","other":"{count} files"},"tasks":{"one":"{count} task","other":"{count} tasks"},"templates":{"one":"{count} template","other":"{count} templates"},"tests":{"one":"{count} test","other":"{count} tests"},"scripts":{"one":"{count} script","other":"{count} scripts"}},"debug":{"activeAt":"Active: {name}","pausedAt":"Paused at {name}"},"detail":{"calledBy":"called by {name}","calls":"calls {name}","catches":"catches","catchesName":"catches {name}","caught":"caught {number}","caughtThrown":"caught {caught} · thrown {thrown}","checkedAt":"checked at {where}","converts":"converts","decision":"decision {id}","defaultProfile":"default","filesBlocked":"{number} blocked","filesNeedingWork":"{number} needs work","form":"form {id}","implementation":"implementation","inCode":"{number} in code","inForce":"in force","instance":"instance {instance}","lastDeploy":"last: {when}","listener":"{event} listener","neverSet":"never set in the project","neverThrown":"never thrown","noAddress":"no address","noImplementation":"no implementation","notCaught":"not caught","notInProject":"not in project","notInThisProject":"not in this project","nothingHandlesIt":"Nothing in this project's code handles it","onWhere":"On {where}, {text}","outOfStep":"{number} out of step","percentCovered":"{percent}% covered","readBy":"read by {number}","reads":"reads","readsInCode":"reads in code","setAs":"set as '{name}'?","setBy":"set by {number}","sets":"sets","setsInCode":"sets in code","test":"test","testGroup":"Tests","theEngine":"the engine","thrown":"thrown {number}","throws":"throws","throwsName":"throws {name}","toCheck":"{number} to check","toCheckOne":"to check","toDo":"{number} to do","toDoOne":"to do","connectionsUndefined":"{number} not defined","connectionsOk":"all defined"},"examples":{"camunda7Detail":"a Java delegate and an external task worker","camunda7Label":"Camunda 7 order process","camunda8Detail":"a Spring Boot worker and a Node worker","camunda8Label":"Camunda 8 order process","cibSevenDetail":"a Java delegate and an external task worker, on CIB seven","cibSevenLabel":"CIB seven order process","detail":"a small project that runs, in this folder","operatonDetail":"a Java delegate and an external task worker, on Operaton","operatonLabel":"Operaton order process","flowableLabel":"Flowable order process","flowableDetail":"a Spring Boot engine with a Java delegate and a user task, on Flowable","activitiLabel":"Activiti order process","activitiDetail":"a Spring Boot engine with a Java delegate and a user task, on Activiti"},"kind":{"bean":"bean","javaClass":"class","jobType":"job type","topic":"topic"},"migrationStatus":{"blocked":"blocked","converts":"converts","needsWork":"needs work","ready":"ready"},"section":{"code":"Code","debug":"Debug","decisions":"Decisions","deployment":"Deployment","errors":"Errors","examples":"Start from an example","files":"Files","forms":"Forms","messages":"Messages","migration":"Migrate to Camunda 8","processes":"Processes","templates":"Element Templates","tests":"Tests","variables":"Variables","workers":"Workers","scripts":"Scripts","connections":"Connections"},"title":{"implementationsOf":"Implementations of {name}","theProcessTests":"the process tests"},"tooltip":{"becomes":"Becomes {what}.","errorNeverThrown":"An error event catches it and nothing throws it","errorUncaught":"The code throws it and no error event catches it","migration":"What does not carry over from Camunda 7 to Camunda {target}, file by file, and what the Java code becomes","templatesOutOfStep":"Some templates no longer say what the worker they were written from does","variableTypo":"Nothing sets '{name}', and '{typo}' is set: a typo in one of them?","connections":"The secrets and MCP clients your diagrams refer to, and where each one is defined."},"unsupported":{"script":"Scripts open in an IDE tab. Here, edit the script in the element's Properties panel."},"script":{"missing":"That script is no longer in the diagram."}},"scenarios":{"aGateway":"a gateway","addedScenario":"Added scenario","barText":{"stepOf":"Step {at} of {total}","steps":"{count} steps"},"cannotFollow":"Penstock cannot follow process \\"{process}\\": it has no start event to begin at.","checksUnreachedElements":"This scenario checks elements that no way through the current diagram reaches.","chooseAProcess":"This diagram has several executable processes ({processes}): choose one.","coverage":{"capped":"The diagram has more ways through it than fit in {cap} scenarios: these scenarios together reach every flow and end.","doesNotFollow":"Penstock does not follow the steps inside \\"{name}\\": {why}","endEvents":"{unreached} of {total} end events","flows":"{unreached} of {total} flows","noScenarioReaches":"No scenario reaches {parts} (dashed on the diagram)"},"difference":{"againstSteps":"the steps of the plan","againstStepsAndVariables":"the steps of the plan and the variables asserted at its end","branch":"expected {expected}, took {took}","notSet":"not set","plannedButNotRun":"planned, but it did not run","ranButNotPlanned":"ran, but the scenario did not plan it","value":"{name}: expected {expected}, got {got}"},"dmn":{"cannotReadInput":"Penstock cannot read the input {inputs}","chooseVariablesFor":"choose variables for {names}","hitPolicy":{"outputOrder":"Output order","priority":"Priority"},"hitPolicyAny":"Hit policy Any, but rules {rules} match with different results","hitPolicyNeedsValues":"Hit policy {policy} needs output values to order by","hitPolicyUnique":"Hit policy Unique, but rules {first} and {last} both match: the engine raises an error","inputFits":"{input} {value} fits {cell}","noRuleMatches":"no rule matches these values","raisesAnError":"the engine raises an error, so it returns nothing","returnsOutputs":"it returns {outputs}","ruleMatches":"Rule {rule} matches","rulesMatch":"Rules {rules} match","tableBecause":"{table}: {because}","textAsNumber":"{name} is text {value}, but the rules compare it as a number","unnamedInput":"input {number}","unnamedOutput":"output {number}","why":"{which}; {returns}","whyWithReasons":"{which}: {reasons}; {returns}"},"doesNotReachAnEnd":"With these values the process does not reach an end.","duplicateDecision":"The decision \\"{id}\\" is in {used} and {other}: Penstock uses {used}","event":{"message":"{name} (message {message})","signal":"{name} (signal {signal})","timer":"{name} (timer {timer})"},"gatewayHint":{"cannotCheck":"Penstock cannot check {text} here","chooseVariables":"choose variables so that {text}","default":"the default: taken when no other condition is true","isFalse":"{text} is false{used}","isTrue":"{text} is true{used}","noCondition":"has no condition, so it is always taken","undecided":"{text} cannot be decided: {notes}; Camunda 8 can stop at an incident here"},"gatewayNeedsCondition":"Every flow out of an exclusive gateway needs a condition in Camunda 8, except the default flow. Give it a condition, or make it the default flow in the properties panel first.","issue":{"doesNotFollowInside":"Penstock does not follow the steps inside {label}: {why}","nothingCompletesTheStep":"The scenario has no instruction that completes this step","nothingMakesTheEventHappen":"The scenario has no instruction that makes this event happen","overlap":"Both {first} and {last} are true{values}: the engine takes the first in the file, {taken}, {never}","stuckAtGateway":"No condition is true and there is no default: the engine raises an incident here","timerNeverFires":"The scenario does not let this timer fire","valuesDoNotTake":"{hints}: these values do not take {names}","valuesTakeMore":"{hints}: these values also take {names}"},"listSeparator":{"many":" or ","two":" or "},"namesNoProcess":"This scenario names no process, and this diagram has several executable processes ({processes}).","needsAnEngine":"Running scenarios needs an engine. Set up the deployment profile in force with an address, as for Deploy, and a local engine or one marked deployment.forTests: true.","noConditionAtGateway":"No condition is true at {where} and there is no default flow: the engine raises an incident there.","noExecutableProcess":"This diagram has no executable process.","notFollowed":{"adhoc":"an ad-hoc sub-process runs its steps in any order","callActivity":"a call activity runs another process"},"note":{"noOrder":"Penstock does not compare {kind} values with < or >","noTextOrder":"Penstock does not compare text with < or >","notBoolean":"{name} is {value}, not true or false","otherKind":"{name} is {value}, not {other}"},"processNotExecutable":"This scenario starts process \\"{process}\\", which is not executable in this diagram.","processNotInDiagram":"This scenario starts process \\"{process}\\", which is not in this diagram.","quoted":"\\"{name}\\"","slot":{"carriesNothing":"Carries no variables.","completesWithNothing":"Completes with no variables. Add the ones the form would send.","expectedAtTheEnd":"Variables that must be set at the end","itReturns":"It returns","messageCarries":"The message carries","noVariablesAdd":"No variables. Add the ones the gateways below need.","nothingChecked":"Nothing is checked about the variables. Add the ones that matter.","returnsNothingAdd":"Returns nothing. Add the variables it should set.","signalCarries":"The signal carries","startVariables":"Start variables","theyCompleteWith":"They complete it with","workerReturns":"The worker returns"},"step":{"callsTheProcess":"Runs the process {process} (the scenario checks this step, not what is inside)","code":"code","comesFirst":"; in this scenario {target} comes first","correlationKey":" (correlation key {key})","evaluatesTheDecision":"Evaluates the decision {decision}","failsWithError":"fails with error {code}","gatewaySendsOn":"The gateway sends the process on","labelCatchesIt":" and {label} catches it","labelSendsOn":"{label} sends the process on","messageArrives":"Message \\"{message}\\" arrives{key}","messageCaught":"Message \\"{message}\\" arrives while the task waits, and {label} catches it{key}","neverTakenMany":"so {names} are never taken","neverTakenOne":"so {name} is never taken","noBranch":"no branch","noConditionNoDefault":"No condition is true and there is no default flow","passesThrough":"Passes through {label}","personCompletes":"A person completes {label}{with}","processEndsAt":"The process ends at {label}","repeatsPerItem":" (once here; it repeats for each item)","returns":"returns {values}","returnsNothing":"returns nothing","runs":"Runs {label}","runsAndCompletes":"{label} runs {which} and completes","runsStepsFollow":"Runs {label}: its steps follow{repeats}","signalIsBroadcast":"Signal \\"{signal}\\" is broadcast{caught}","splitsInto":"Splits into {number} branches that run side by side","startsWithVariables":"Starts at {label} with these variables","startsWithoutVariables":"Starts at {label} with no variables","subProcessEndsAt":"The sub-process ends at {label}","subProcessStartsAt":"The sub-process starts at {label}","takesBecause":"Takes {names}: {because}","takesButValues":"Takes {names} for this scenario, but these values would take {other}","taskFailsWithError":"The task fails with error {code} and {label} catches it","timerFires":"{label} fires{when} - the scenario lets it fire at once","waitsForBranches":"Waits for {number} incoming branches, then goes on","waitsForFirst":"Waits for whichever comes first: {targets}","with":" with {values}","workerOf":"The worker of {label} ({kind} {type}) {what}"},"takesAnotherWay":"The values in this scenario take another way through the process than the elements it checks.","targetNeedsSignIn":"The engine at {url} needs a sign-in. Save the password in Deploy > Connection..., then run again.","theElement":"the {type}","theType":"the {type}","thisKindOfSubProcess":"this kind of sub-process","value":{"text":"text {value}"},"valueKind":{"boolean":"true or false","null":"null","number":"a number","other":"a {kind}","text":"text"},"workerKind":{"jobType":"job type","topic":"topic"}},"testCases":{"count":{"instances":{"one":"1 {state} instance","other":"{count} {state} instances"},"testBuilds":{"one":"1 test build","other":"{count} test builds"}},"elementIdMismatch":"{label} is the element {actual}, expected {expected}","engines":{"activityNotRunning":"the activity instance {element} is not running","answered":"{method} {path} answered {status}{reason}","deployed":"deployed","errorThrownByTheTestCase":"{code} thrown by the test case","reason":": {reason}","refusedTheBuild":"The engine refused the test build ({status}): {reason}"},"failingOnPurpose":"failing as the test case asks ({tried} of {total})","forOtherEngines":"this test case is for {engines}","leftovers":{"kept":"Could not remove {builds} left by an interrupted run; the next run tries again","removed":"Removed {builds} left by an interrupted run"},"listSeparator":" and ","log":{"broadcast":"Broadcast {signal}","completed":"Completed {label}","correlated":"Correlated {message}","couldNotCancel":"Could not cancel the instance: {reason}","couldNotReadTheTrace":"Could not read the trace: {reason}","couldNotRemoveTheBuild":"Could not remove the test build: {reason}","deployedTheBuild":"Deployed the test build","failedOnPurpose":"{label}: failed on purpose, {tried} of {total}","mockCompleted":"{label}: the mock completed the job","mockThrew":"{label}: the mock threw {code}","noElementWithJobType":"No element of the diagram has the job type {jobType}, so its mock answers nothing","startedInstance":"Started instance {instance}","failedAsIncident":"{label} was made to fail with no retries left, as in the incident"},"mismatch":{"activeExactly":"active: {active}, expected exactly {expected}","completedInOrder":"completed in the order {order}, expected {expected}","hasNotCompleted":"has not completed","hasNotFailed":"{label} has not failed{where}","incidentExpected":"expected an open incident, there is none","incidentUnexpected":"expected no open incident, there is one at {elements}","instanceCount":"{label} has {count}, expected {expected}{where}","instanceState":"expected the instance to be {expected}, it is {actual}{where}","isActive":"is active","isNotActive":"is not active","notWaitingForAUser":"{label} is not waiting for a user{where}","userTaskNotCompleted":"{label} has not completed{where}","variableNotSet":"variable {name} is not set","variableValue":"{name} is {actual}, expected {expected}","wasNotCanceled":"{label} was not canceled{where}","wasNotReached":"{label} was not reached{where}","wasNotTerminated":"was not terminated","wasReached":"was reached","incidentMissing":"{label} has no incident{where}","incidentOtherType":"{label} has an incident of type {actual}, not {expected}","incidentOtherMessage":"{label} has an incident, but its message \\"{actual}\\" does not match {expected}"},"needsCreateProcessInstance":"a test case starts with CREATE_PROCESS_INSTANCE, after its mocks","noElementNamed":"no element named {name} in the diagram","notActiveSoNoVariables":"{label} is not active, so its variables cannot be set","notInDiagram":{"one":"the test case expects {ids}, which is not in this diagram","other":"the test case expects {ids}, which are not in this diagram"},"nothing":"nothing","numberedCaseName":"{name} ({seen})","one":"one","penstockFailed":"Penstock failed: {reason}","problem":{"behaviourNeedsErrorCode":"the behaviour of {element} needs errorCode","behaviourNeedsThen":"the behaviour of {element} needs then: complete, error, fire or hold","behavioursNotAnObject":"x-penstock.behaviours is not an object","blockNotAnObject":"x-penstock is not an object","caseHasNoInstructions":"test case \\"{name}\\" has no instructions","caseHasNoName":"test case {number} has no name","enginesList":"x-penstock.engines is a list of {engines}","fileLeftAsItIs":"the file is left as it is: {problems}","fileNotValidJson":"the file is not valid JSON, so it is left as it is: fix it first","hasNoInstructions":"it has no instructions","hasNoName":"it has no name","inCase":"test case \\"{name}\\": {problem}","instructionNeeds":"instruction {number} ({type}) needs {property}","instructionNotAllowed":"instruction {number} ({type}) has {property}, which the Camunda test-case schema does not allow","noTestCasesList":"there is no testCases list","notAnObject":"it is not an object","notJson":"not JSON: {reason}","shapelessInstruction":"instruction {number} is not an object with a type","reproducesNeedsElement":"The reproduces block needs an elementId.","reproducesBadPattern":"The message in the reproduces block should be a regular expression of at most 500 characters."},"safety":{"refusal":"Penstock answers jobs only on an engine meant for tests, and {where} is not marked as one. Mark the profile with deployment.forTests: true in penstock.yaml, or run against a local engine.","thisEngine":"this engine"},"scenarioName":{"boundaryFires":"{boundary} fires","way":"{decision}: {way}"},"startsOnAnEvent":"This process starts on {kind}, which Penstock cannot yet start a scenario from.","suites":{"cannotBeRead":"{suite} cannot be read","cannotRun":"cannot run","noDiagram":"no diagram belongs to {suite}","noEngineToRunOn":"{diagram} has no engine to run on: set deployment.url in penstock.yaml","traceOf":"trace of {name}: {where}","unlicensed":"Process test runs: part of Penstock Pro","unnamedCase":"test case {number}"},"toFillIn":"To fill in: {unresolved}","trace":{"couldNotRead":"Could not read {path}: the engine answered {status}{reason}","reason":": {reason}"},"unknownName":"?","unresolved":{"chooseVariables":"choose variables so that {condition} holds","chooseVariablesWithout":"choose variables so that {condition} does not hold","noConditionForTheWay":"\\"{decision}\\" has no condition for \\"{way}\\": give its flows conditions, or this test cannot choose the way","runsOncePerItem":"{name} runs once per item: repeat its COMPLETE_JOB for each one"},"unrunnable":{"exampleData":"{type} cannot use example data yet","foreignProcess":"{type} looks at the process {foreign}, and Penstock follows only the instance of {root}","notYet":"{type} is not something Penstock can run yet","oneInstancePerTestCase":"Penstock runs one instance per test case","runtimeInstructions":"{type} cannot run runtime instructions yet","shapelessInstruction":"instruction {number} is not an object with a type","unknown":"{type} is not something Penstock can run","userTaskFields":"ASSERT_USER_TASK cannot check {fields} yet"},"waiting":{"engineDidNotRun":"the engine did not run {label} within {seconds}","instanceNotShown":"the engine did not show the instance within {seconds}","jobNotHandedOut":"the engine did not hand out the job of {label} within {seconds}","messageFoundNothing":"the message {message} found nothing waiting for it within {seconds}","noJobAt":"no job at {where} within {seconds}","noUserTaskAt":"no user task {where} within {seconds}","noWorkerTook":"no worker took {type} within {seconds}","timerDidNotFire":"the timer {label} did not fire within {seconds}"},"whereAt":" at {elements}","kind":{"error":"an error event","escalation":"an escalation event","conditional":"a conditional event"},"edit":{"nameEmpty":"The name should not be empty.","nameTaken":"A scenario named {name} is already in this file, so the name should be different.","notFound":"No scenario named {name} is in this file.","copyName":"{name} copy","copyNumbered":"{name} copy {number}"},"taskTest":{"noProcess":"The diagram has no executable process.","notFound":"There is no element with the id {element} in the diagram.","noWay":"No way through the process reaches {element}.","cannotThrow":"{element} is a user task, so it cannot throw an error; complete it or hold it instead.","name":"Task test: {element}"},"failingWithIncident":"Failing on purpose to reproduce an incident"},"features":{"ai-chat":{"title":"AI chat","gives":"shows the changes an agent that speaks the Agent Client Protocol proposes to your diagrams on the canvas, for you to accept or reject"},"alreadyBought":"if you have already bought it","auto-layout":{"title":"Auto layout","gives":"turns a tangled diagram into a readable left-to-right flow"},"baseline":{"title":"Check baselines","gives":"fails a build only on problems that are new"},"bot":{"title":"The review bot","gives":"answers /penstock in pull and merge requests with pictures"},"buyIt":"buy it; the licence arrives on this machine by itself","changes-pictures":{"title":"Pictures of changes","gives":"draws what changed, coloured, next to what it was"},"ci-annotations":{"title":"Findings in the code review","gives":"shows the check findings as SARIF or annotations on the changed lines"},"code-links":{"title":"Diagram and code checks","gives":"finds tasks whose job type, topic, class or bean has nothing in the code to run it, and workers no diagram uses"},"docs":{"title":"Process documentation","gives":"writes a page for every process with its picture, steps, decisions, events and data"},"edit":{"title":"Editing from the command line","gives":"changes a diagram the way the editor would, and refuses an edit that breaks it"},"education":"Free Pro for students, teachers and open-source maintainers: apply at {url}","element-templates":{"title":"Element templates","gives":"writes an element template for every job worker the project has, so the Camunda palette fills itself in"},"flow-analysis":{"title":"Flow analysis","gives":"finds deadlocks, branches that run twice and steps that can never run, with the path that leads there"},"giveThePipelineAKey":"Give this pipeline a {tier} key in the PENSTOCK_LICENSE secret.","inAPipeline":" in a pipeline","migration":{"title":"Camunda 7 to Camunda 8 conversion","gives":"converts a diagram for Camunda 8, marks what it could not convert on the element, and writes job workers from the code of your delegates"},"partOf":"{title}{where}: part of Penstock {tier}. {gives}.","paths":{"title":"Process scenarios","gives":"lists every distinct way through a process with the conditions it takes, ready to use as a test plan"},"pr-report":{"title":"Pull request reports","gives":"writes one comment with the check, the diff and pictures of every changed diagram"},"test-case-generation":{"title":"Test case files","gives":"writes the test-case files for every way through each process, which scenarios run then plays back against an engine"},"test-runs":{"title":"Process test runs","gives":"runs a process step by step against a local engine, with mocks, and shows what every step received and changed"},"tests":{"title":"Process tests","gives":"writes a JUnit test for every way through a process, with variables that take it there, for Camunda Process Test or camunda-bpm-assert"},"theKeyHolds":"PENSTOCK_LICENSE holds a {have} licence; this needs {need}.","trialHasEnded":"Your {days}-day trial has ended.","variable-checks":{"title":"Variable checks","gives":"finds the fields and names a step reads that the code that sets them lacks"},"api-templates":{"title":"Templates from an API description","gives":"writes a REST connector element template for every operation of an OpenAPI, Swagger or Postman file, with typed inputs, authentication from its security schemes and error handling"},"connections-environments":{"title":"Environment comparison for connections","gives":"lists the secrets, MCP clients and settings that one environment lacks compared with another, so you see what the one you deploy to is missing before you deploy"},"incident-scenario":{"title":"Reproduce an incident as a scenario","gives":"turns an incident into a scenario that starts the process with its start values, drives the path it took and ends on the same incident, runs it, and checks a proposed fix against it"},"agent-tools":{"title":"Agent scenarios and migration","gives":"writes the scenario of an AI agent process with the model stubbed, and rewrites the agent elements of old Camunda templates to the current agent templates"},"ai-receipt":{"title":"Verification receipt for AI changes","gives":"writes a receipt of what an AI agent's change did to your files (what was added, removed or changed, the new problems it brought, the scenarios that ran), hands new problems back to the agent to fix, keeps the receipt as a file, and fails a pipeline when an agent's change has none"},"dmn-tests":{"title":"DMN test table","gives":"runs saved test cases on a decision table, shows which rules each case matched and which rules no case covers, and fails a pipeline when rule coverage falls below a minimum"},"migration-proof":{"title":"Migration proof on both engines","gives":"runs your scenarios on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and shows for every scenario whether the converted process behaves the same or where it first differs"},"policy-pack":{"title":"Policy pack in git","gives":"writes your team’s rules, severities, conventions, palette, element templates and baselines into a folder in git, pins it by hash, locks those settings in the editor, and fails a pipeline when the pack was changed, a rule was weakened or a required check did not run"},"promotion":{"title":"Environment promotion and drift","gives":"shows which resources of an environment differ from your files, plans and takes exactly what was verified on one environment to the next, names the secrets the target lacks, and refuses a protected environment without a typed confirmation or, in a pipeline, an approval record"},"audit-evidence":{"title":"Audit evidence pack","gives":"writes one reviewable package for a release: the diagrams as pictures, the check, scenario and DMN test results, the changes since the last tag, the policy and AI receipts, every file with its SHA-256 and a seal that shows tampering, and verifies a package again later"},"heatmap":{"title":"Heat map and bottlenecks from engine data","gives":"shows the elements of a diagram coloured by how often, how long and how badly they ran on the engine over a period you choose (visits, average and 95th percentile duration, incidents and failure rate) and lists the slowest and most failing elements, each a click from its place on the diagram"},"replay":{"title":"Replay and what-if from this token","gives":"shows the real history of one process instance on the diagram step by step with the variables at each step, and starts a new instance at a chosen element with those variables edited, only on an engine marked for tests or on this machine"},"incident-loop":{"title":"Incident to fix loop","gives":"runs an incident through its whole loop with every step shown: the reproducing scenario, the proposed fix, a check of the fix with that scenario, redeploying only the changed file and retrying the failed job, as a dry run first and with a confirmation before anything changes on the engine"},"refactor-bulk":{"title":"Bulk renames and Extract to Call Activity","gives":"renames many names at once from a mapping file, each with the same preview and the same refusals as a single rename, and moves a subprocess, or a fragment with one way in and one way out, into its own process replaced by a call activity wired through variable mappings; a single rename with its preview stays free, with no time limit"}},"license":{"activeOnThisMachine":"active on this machine","ago":{"days":"{count} days ago","months":"{count} months ago","today":"today","yesterday":"yesterday"},"checkoutNotHttps":"the checkout is not on https, so it is not opened: {protocol}","checkoutNotOpened":"the checkout could not be opened","checkoutNotOpenedStatus":"the checkout could not be opened ({status})","clockSetBack":"the system clock is set back below a time this machine already saw; set it right","codeWrongOrExpired":"That code is wrong or has expired. Ask for a new one.","couldNotBeReachedForATrial":"the licence service could not be reached to start the Pro trial","couldNotBeReachedForTheKey":"the licence service could not be reached to check PENSTOCK_LICENSE","count":{"days":{"one":"{count} day","other":"{count} days"},"moreDays":{"one":"{count} more day","other":"{count} more days"}},"fromTheEnvironmentKey":"from PENSTOCK_LICENSE","needsOneOnlineCheck":"this licence needs one online check to be renewed","noCheckoutYet":"there is no checkout for {tier} yet","noLicenceInCi":"no licence; set PENSTOCK_LICENSE for this pipeline","noStableMachineId":"this machine has no operating-system machine id, so it cannot start the Pro trial; activate a licence instead","notAValidKey":"PENSTOCK_LICENSE is not a valid Penstock key","notAnEmailAddress":"That does not look like an e-mail address.","notRenewed":"the licence has not been renewed for {days} days; connect once to keep it","offlineForAWhile":"offline; works {days} before it needs to check in","reason":{"cannotBeRead":"the licence cannot be read","datedInTheFuture":"the licence is dated in the future; check the clock","notSigned":"the licence is not signed by Penstock","otherMachine":"this licence belongs to another machine"},"refusedToStartATrial":"the licence service refused to start a trial","seatsFullHint":" Sign in with \`penstock license login\` to see the machines using it and free one.","serviceAnswered":"the licence service answered {status}","theLicenceWasRefused":"The licence was refused.","trialDaysLeft":"Pro trial, {days} left","trialHasEnded":"the Pro trial has ended","unusable":"The licence service answered with a licence that cannot be used: {reason}."},"output":{"accepted":"{count} accepted","alreadyThereAndKept":", {count} already there and kept","authHint":{"basic":"Check deployment.auth.username in penstock.local.yaml and PENSTOCK_PASSWORD.","oauth":"Check deployment.auth.clientId and deployment.auth.tokenUrl in penstock.local.yaml and PENSTOCK_CLIENT_SECRET.","setIt":"Set deployment.auth in penstock.local.yaml: type basic with a username and PENSTOCK_PASSWORD, or type oauth with PENSTOCK_CLIENT_SECRET; PENSTOCK_TOKEN sends a bearer token as it is."},"boundaryFires":"{decision}: {boundary} fires","classNeedsDependency":"The class needs this test dependency{where}:","complete":"complete","confirmInTerminal":"Run test cases on {url}? They deploy a test build there, start instances and answer the jobs they mock. [y/N] ","couldNotRememberBuilds":"Penstock could not remember its test builds in {file}:","count":{"class":{"one":"{count} class","other":"{count} classes"},"diagram":{"one":"{count} diagram","other":"{count} diagrams"},"file":{"one":"{count} file","other":"{count} files"},"finding":{"one":"{count} finding","other":"{count} findings"},"lostConnection":{"one":"{count} lost connection","other":"{count} lost connections"},"reference":{"one":"{count} reference","other":"{count} references"},"scenario":{"one":"{count} scenario","other":"{count} scenarios"},"sourceFile":{"one":"{count} source file","other":"{count} source files"},"test":{"one":"{count} test","other":"{count} tests"},"way":{"one":"{count} way","other":"{count} ways"},"worker":{"one":"{count} worker","other":"{count} workers"}},"decisionWay":"{decision}: {way}","end":"end","everyRuleHasAPage":"Every rule has a page with why it matters and how to fix it: {url}","everyTaskHasCode":"Every task the diagrams hand to code has something in the code to run it.","firesOn":"{boundary} fires on {decision}","fixedSinceTheBaseline":"{count} fixed since the baseline","flowAnalysisLeftOut":"Flow analysis was left out: it is part of Penstock Pro, and Team in a pipeline. penstock license buy","fromDiagramsToCode":"{sources}, {diagrams}, {references} from diagrams to code","inFile":" in {file}","kind":{"decision":"decision","form":"form","notBpmn":"file that is not BPMN"},"layoutAlwaysReflows":"Auto layout always reflows, so a difference here is expected; pass --write to take it.","newCount":"{count} new","newFindings":"{count} new","noBpmnFiles":"No .bpmn files found.","noChange":"no change","noExecutableProcessWithAWay":"no executable process with a way through it that starts at a plain start event","noLostConnections":"no lost connections","noProcessWithAPath":"No process with a path to an end was found.","noSteps":"no steps","noSuchPath":"There is no path {target}","isAFolder":"{file} is a folder, not a file.","folderTooLarge":"This folder is too large to be a project; give the folder of the diagrams","noTestCaseFile":"there is no test-case file; penstock scenarios generate writes {file}","noTestCaseFiles":"No test-case files found. penstock scenarios generate writes them from the ways through each process.","noTestCaseFilesFirst":"No test-case files found. penstock scenarios generate writes them first.","notABpmnDiagram":"{file} is a {kind}, not a BPMN diagram, so there is nothing to show.","notConfirmedForTests":"Not run: the engine was not confirmed for tests","notMarkedForTests":"{url} is not marked deployment.forTests: run in a terminal to confirm it once, or mark the profile with deployment.forTests: true","notValid":"{file} is not valid {what}: {reason}","notValidFile":"This file is not valid {what}: {reason}","nothingNew":"nothing new","nothingToDeploy":"Nothing to deploy: no file has a deployment.url.","penstockOnlyCases":" test cases that need Penstock and run differently there ({count}): {names}","penstockBehaviourHints":"the steps carry Penstock behaviour hints, which Camunda Process Test does not read","whyItMatters":"Why it matters. {why}","howToFixIt":"How to fix it. {fix}","see":"See {docs}","pipelineCannotConfirm":"{url} is not marked deployment.forTests, and a pipeline cannot confirm it: mark the profile with deployment.forTests: true","ready":"ready","reflowedLayout":"reflowed layout","rulesCouldNotRun":"The rules could not run: {reason}","unresolvedReference":"{id} points at {value} as its {property}, and the file has no element with that id.","runUpdateBaseline":"Run check --update-baseline to record what is fixed.","stopped":"Stopped: {totals}","tasksPointAtNothing":"Tasks that point at code that is not there: {count}.","testsNeedDependencies":"The tests need these test dependencies{where}:","testsSummary":"{tests} in {classes}, one per way through each process.","theConnectionFromTo":"the connection from {from} to {to}","theFileIsEmpty":"This file is empty","theKind":"the {kind}","toFillIn":"{count} to fill in","toFillInPrefix":"To fill in","totals":"{passed} passed, {failed} failed, {skipped} skipped in {files}","unresolvedWorker":"note {workers} with a type written as an expression that could not be read, starting at {where}","when":" when {condition}","wouldReflowLayout":"would reflow layout (pass --write to save)","wroteFindings":"wrote {file} with {findings}","wroteTestEngine":"wrote {file} an in-memory test engine that resolves mocked delegate beans","wroteTheBridge":"wrote {file} runs {files} under Camunda Process Test","classNotInProject":"class {value} is not in the project","listenerName":"{value} listener","runsSteps":"- [ ] runs {steps}","wroteScenarios":"wrote {file} {scenarios}{toFillIn}","andToFillIn":{"one":", {count} to fill in","other":", {count} to fill in"},"couldNotBePlanned":", {ways} could not be planned: {problem}","status":{"ok":"ok","pass":"pass","fail":"fail","note":"note","skip":"skip","same":"same","change":"change","wrote":"wrote","sent":"sent","updated":"updated","added":"added","removed":"removed","changed":"changed","kept":"kept","wouldChange":"would change","wouldRewrite":"would rewrite","wouldSend":"would send","error":"error","warning":"warning","info":"info"},"noDeploymentUrl":"no deployment.url in its configuration","authNote":{"passwordNotRead":"deployment.auth.password is not read: a password comes from PENSTOCK_PASSWORD or the IDE password safe, never from a file"},"authProblem":{"basicWithoutUsername":"deployment.auth.type is basic, but deployment.auth.username is not set","basicWithoutPassword":"deployment.auth.type is basic, but there is no password: set PENSTOCK_PASSWORD (the IDE keeps it in its password safe)","oauthWithoutKeys":"deployment.auth.type is oauth, but it needs deployment.auth.tokenUrl, deployment.auth.clientId and PENSTOCK_CLIENT_SECRET","oauthFailed":"the token endpoint answered {status}: {body}","oauthNeedsKeys":"oauth needs deployment.auth.tokenUrl, deployment.auth.clientId and PENSTOCK_CLIENT_SECRET","oauthNoToken":"the token endpoint's answer has no access_token","oauthUnreachable":"the token endpoint at {url} did not answer: {reason}"},"unreadableBpmn":"this file is not valid BPMN XML","noWorkerForJobType":"no worker handles job type \\"{value}\\"","noWorkerForTopic":"no external task worker subscribes to topic \\"{value}\\"","noBeanNamed":"no Spring bean is named \\"{value}\\"","callsNoProjectProcess":"calls process \\"{value}\\", which no diagram in the project defines","callsNoProjectDecision":"calls decision \\"{value}\\", which no .dmn file in the project defines","showsNoProjectForm":"shows form \\"{value}\\", which no .form file in the project defines","showsNoEmbeddedForm":"shows embedded form \\"{value}\\", which the diagram does not contain","jobTypeNoDiagramUses":"worker for job type \\"{value}\\" is not used by any diagram","topicNoDiagramUses":"subscription to topic \\"{value}\\" is not used by any diagram","noJUnitBridge":"{engine} has no JUnit bridge yet: point a profile at your application's engine-rest and run penstock scenarios run","casesFolder":"Camunda Process Test reads test cases from src/test/resources/test-cases; move the file there","couldNotBePainted":"the diagram could not be painted","credentialsRefused":"It did not accept the credentials. {hint}","noGeneratedTests":"{engine} projects have no generated tests yet; Penstock writes tests for Camunda 7, Operaton, CIB seven and Camunda 8","noDeployFor":"Deploying to {engine} is not supported; deploy with the engine's own tools","taskTest":{"unreadable":"Cannot read {file}.","needsDiagram":"Say which diagram to test: penstock test task <file.bpmn> --element <id>.","needsElement":"Say which element to test with --element <id>.","element":"{element}: {state}","notReached":"{element} was never reached.","instance":"Process instance: {state}","received":"It received:","sent":"It sent:","variables":"Variables at the end:","noIncidents":"No incidents.","incidents":"Incidents:","trace":"Trace: {file}","badVariables":"{flag} is not a JSON object: {reason}","oneMode":"Use only one of --complete, --error and --hold.","state":{"COMPLETED":"completed","ACTIVE":"waiting","TERMINATED":"terminated","FAILED":"failed"}}},"templates":{"drift":{"differentType":"has {name} as a different type","noLongerRead":"asks for {name}, which the worker no longer reads","notRead":"has {name}, which the worker no longer reads"},"workerDescription":"The job worker {worker} in {where}.","workerSets":" Sets {names}.","workerInPackage":"{class} in {package}","writtenByPenstock":"Written by Penstock from the code.","rejected":{"line":"The template {name} ({id}) is not loaded: {reason}","notAnObject":"it should be a JSON object","schemaMissing":"it should have a $schema attribute that names the Camunda 8 element template schema","schemaOther":"its $schema attribute should name the Camunda 8 element template schema","elementType":"its elementType should be an object whose value names the BPMN element, such as bpmn:ServiceTask","appliesTo":"its appliesTo should be a list of BPMN element types, such as bpmn:Task","unexplained":"the Camunda modeler does not accept it and gives no reason","anonymous":"A template is not loaded: {reason}"},"check":{"schemaFallback":"does not match the schema","camunda7":"Camunda 7","camunda8":"Camunda 8","syntax":"The file is not valid JSON: {reason}","notAnObject":"The file should hold one element template or a list of them.","entryNotAnObject":"Entry {index} of the list should be an element template object.","schemaMissing":"It should have a $schema attribute, {schema}, or Camunda 8 will not load it.","schemaUnknown":"Its $schema should name the Camunda element template schema.","schemaEngine":"Its $schema names the {schema} schema, but this project runs {engine}.","schemaNewer":"Its $schema is pinned to version {pinned}, newer than the {supported} that Penstock checks against.","bindingOtherEngine":"Property {index} binds {type}, which belongs to {engine}; this is a {here} template.","bindingTwice":"Property {index} binds {type} {name} again; property {first} already does.","appliesToMissing":"It should have an appliesTo list of BPMN element types, such as bpmn:Task.","appliesToEmpty":"Its appliesTo list should name at least one BPMN element type.","appliesToText":"Entry {index} of appliesTo should be text.","appliesToType":"{type} in appliesTo should be a BPMN element type, such as bpmn:Task.","elementTypeValue":"Its elementType should be an object with a value, such as bpmn:ServiceTask.","elementTypeOutside":"Its elementType {element} is not one of the elements that appliesTo ({applies}) names.","engineRange":"engines.camunda, {range}, should be a version range such as ^8.5.","engineMismatch":"It asks for Camunda {range}, but the diagrams here use {versions}, so the modeler hides it.","duplicate":"The id {id} with version {version} is already defined in {where}; only one of them is loaded.","duplicateNoVersion":"The id {id} without a version is already defined in {where}; only one of them is loaded.","folderOther":"Camunda Desktop Modeler reads only .camunda/element-templates and resources/element-templates; move the file there.","folderNone":"This looks like an element template, but it is not in an element-templates folder, so the modeler never reads it.","webCamunda7":"Web Modeler runs Camunda 8 only and does not take Camunda 7 templates."},"editor":{"customProperties":"Custom properties","sectionTemplate":"Template","name":"Name","id":"ID","version":"Version","description":"Description","engine":"Schema","appliesTo":"Applies to","appliesToHint":"BPMN element types, separated by commas, for example bpmn:ServiceTask","elementType":"Element type","elementTypeHint":"The type the element becomes when the template is applied, for example bpmn:ServiceTask","entriesVisible":"Default entries","keepDefaults":"Keep the standard properties panel entries visible","entriesVisibleHint":"Off hides everything the template does not define","keywords":"Keywords","documentationRef":"Documentation link","runsOn":"Runs on","runsOnHint":"Engine version range, for example ^8.7","groups":"Groups","noGroups":"No groups. Properties without a group appear under Custom properties.","addGroup":"Add group","groupId":"Group ID","groupLabel":"Group label","properties":"Properties","noProperties":"No properties yet.","addProperty":"Add property","propertyHeading":"Property {number}","label":"Label","type":"Type","defaultValue":"Default value","checkedByDefault":"Checked by default","propertyId":"Property ID","propertyIdHint":"Needed when a condition or another property refers to this one","group":"Group","noGroup":"No group","optional":"Optional","mayStayEmpty":"May stay empty","binding":"Binding","bindingType":"Binds to","bindingName":"Name","bindingSource":"Source","bindingSourceHint":"The expression the output is read from, for example =response","constraints":"Constraints","notEmpty":"Required","mustBeFilled":"Must be filled in","minLength":"Minimum length","maxLength":"Maximum length","pattern":"Pattern","patternHint":"A regular expression the value has to match","feelMode":"FEEL","feelOptions":{"none":"Not an expression","optional":"Expression allowed","required":"Expression required","static":"Static expression"},"choices":"Choices","choiceName":"Shown as","choiceValue":"Value","addChoice":"Add choice","condition":"Show only when","conditionProperty":"Property","conditionNone":"Always shown","conditionNeedsIds":"Give another property an ID to use it in a condition","conditionIs":"Is","conditionEquals":"Equal to","conditionOneOf":"One of","conditionActive":"Filled in","conditionValue":"Value","moveUp":"Move up","moveDown":"Move down","remove":"Remove","nothingToPreview":"Nothing to preview yet","previewFillsIn":"The properties panel fills in as you add properties.","versionNumber":"Version {version}","noFieldsYet":"This template has no fields yet.","feelBadge":"FEEL","hiddenByConditions":"{count} hidden by conditions. Change the values above to see them.","hiddenProperties":"Hidden properties set silently: {count}.","defaultsShown":"The standard properties panel entries stay visible below these.","defaultsHidden":"The standard properties panel entries are hidden.","sourceLabel":"Source of {name}","matchesSchema":"The template matches the element template schema.","atLine":"Line {line}","entries":"Templates in this file","entry":"Template {number} of {total}","unreadable":"This file is not valid JSON","unreadableHint":"Fix it in the source view, and the form comes back.","notATemplate":"This is not an element template","notATemplateHint":"The file is a JSON object or list with no template in it. Open the source to change it.","openSource":"Open source","loading":{"title":"Template files and who loads them","intro":"Every element template file found in this project, whether Camunda Desktop Modeler and Web Modeler would load it, and the reason when not.","refresh":"Refresh","reading":"Reading the project…","none":"No element template files found","noneHint":"Put template JSON files in .camunda/element-templates or resources/element-templates.","summary":"{loading} of {total} files load in Camunda Desktop Modeler.","file":"File","desktop":"Desktop Modeler","web":"Web Modeler","reason":"Reason","loads":"Loads","notLoaded":"Not loaded","some":"{loaded} of {total}"}},"generate":{"untitled":"API","unreadable":"The API description is neither JSON nor YAML that can be read: {reason}","unrecognised":"This is not an OpenAPI 3, Swagger 2.0 or Postman collection file.","noOperations":"The API description has no operations to make templates from.","warn":{"unsupportedAuth":"The security scheme {scheme} ({kind}) is not one the REST connector can use, so {operation} has no authentication.","noServer":"The description gives no server URL, so a template url starts at the path: set the base address in each template.","secretExists":"The secret name {name} is already defined in this project, so a template would read that existing secret. Check it is the one you mean, or choose another prefix."},"refused":"These files were not written: {files}","reason":{"outside":"it is outside the folder","symlink":"it is a symbolic link","exists":"it already exists"},"open":"Generate templates from an API description…","dialog":{"title":"Generate element templates","intro":"Choose an OpenAPI, Swagger or Postman file. One REST connector template is made for each operation.","file":"API description","summary":"{title} in {file}: {total} operations found","preview":"Showing the first {shown} of {total} operations. Writing every template needs Pro.","write":"Write templates","written":"Templates written: {count}, in {folder}","noFolder":"Open a project folder first, so the templates have a place to go.","replaceTitle":"Replace existing templates?","replaceText":"These files already exist and will be replaced: {files}","replace":"Replace","failed":"The templates were not written: {reason}","secretsBefore":"Secrets to create: the templates read these names. Writing the templates does not create them; add them to your connector secrets or .env files. Only names are shown.","secretsAfter":"Templates written. Now create these secrets before they run: {names}.","secretsLabel":"Secret names"}}},"connectors":{"archiveDamaged":"The release archive is damaged or incomplete","archiveHasNoTemplates":"The release archive holds no element templates","archiveTooLarge":"The release archive unpacks to more than 512 MB","couldNotBeDownloaded":"The connector templates could not be downloaded","githubAnswered":"GitHub answered HTTP {status}","githubRefused":"GitHub refused the request (HTTP {status}), probably its rate limit; try again later","responseTooLarge":"The response is larger than 64 MB"},"evaluate":{"camunda7Cannot":"Camunda 7 has no way to evaluate an expression. It needs Camunda 8.9 or newer.","expressionNotEvaluated":"The expression could not be evaluated","instancesNotReadable":"The instances of {process} could not be read","needs810":"Camunda 8.10 or newer","needs89":"Camunda 8.9 or newer","processDefinitionNotReadable":"The process definition {process} could not be read","variableNamesNotReadable":"The variable names the engine has seen could not be read","variableNotReadable":"The variable {name} could not be read","variablesNotReadable":"The variables of {instance} could not be read","credentialsMayNotAllow":"the profile's credentials may not allow it","engineAnswered":"{what}: the engine answered {status}","needsThatVersion":"{what} needs Camunda {version} or newer."},"findings":{"because":": {reason}","notValid":"The file is not valid {what}{reason}","nothingInIt":"The file has nothing in it, so there is no diagram to open.","soItCannotBeOpened":", so it cannot be opened or checked.","theFileCannotBeRead":"The file cannot be read","theFileIsEmpty":"The file is empty"},"sections":{"hitPolicy":{"any":"Any: several rules may match if they give the same result","collect":"Collect: every matching rule contributes","first":"First: the first matching rule wins","outputOrder":"Output order: every matching rule, by output priority","priority":"Priority: the matching rule with the highest output priority wins","ruleOrder":"Rule order: every matching rule, in rule order","unique":"Unique: exactly one rule may match"},"hitPolicyText":"Hit policy {policy}{aggregation}.","resultsCombinedBy":", results combined by {how}","whenInput":"When {input}","thenOutput":"Then {output}","inputOf":"input {number}","outputOf":"output {number}","optionsFrom":"from {source}","fieldTable":"Fields","field":"Field","kind":"Kind","writes":"Writes","required":"Required","options":"Options","hiddenWhen":"Hidden when","yes":"yes","notes":"Notes","result":"Result","expression":"Expression","logic":"Logic","noLogic":"none","decision":"Decision","needs":"Needs","formKind":{"textfield":"text field","textarea":"text area","datetime":"date and time","taglist":"tag list","filepicker":"file picker"},"form":"Form"},"xml":{"emptyOrNotClosed":"This is not well-formed XML: the document is empty or not closed","notWellFormed":"This is not well-formed XML: {reason}"},"import":{"failure":{"nothingToImport":"There is nothing in this {format} file that has a BPMN meaning, so there is nothing to import.","bizagiPackage":"Bizagi .bpm files are a package in Bizagi Modeler's own format, which Penstock cannot read. In Bizagi Modeler, export the process as BPMN 2.0 (a .bpmn file) and import that instead.","visioBinary":"{name} is in the old binary Visio format (.vsd), which Penstock cannot read. In Visio, use File > Save As and choose Visio Drawing (.vsdx), then import that.","xpdl":"This is XPDL, which does not carry the diagram in a form Penstock can read. In the tool it came from, export the process as BPMN 2.0 (.bpmn) and import that.","unknownFormat":"{name} is not a diagram Penstock can import. It reads draw.io, Visio, Signavio and Bizagi files.","notBpmnXml":"This XML is not BPMN 2.0.","noPositions":"This BPMN file has no diagram positions (no BPMNDiagram), so there is nothing to draw. Open it in a modeler that lays it out, or draw it in Penstock.","entryTooLarge":"{name} is too large to import.","archiveTooLarge":"The archive is too large to import.","notZip":"The file is not a readable ZIP archive.","pageTooLarge":"This draw.io page is too large to import.","pageEmpty":"This draw.io page has no content.","compressedPage":"The compressed draw.io page could not be read. In draw.io, use File > Properties > Compressed off, or File > Export as > XML, and import that.","pageNoCells":"This draw.io page has no cells.","noPages":"This draw.io file has no pages.","notVisio":"This archive is not a Visio drawing: it has no visio/document.xml. Only .vsdx files are read.","noVisioPages":"This Visio drawing has no pages.","noShapes":"This Visio drawing has no shapes.","tooComplex":"This file is too large or too deeply nested to import safely.","entities":"This XML declares entities, which Penstock does not expand, so it was not imported.","notFrom":"{name} is a {format} file, not a {from} file, so nothing was imported. Leave out --from to import it as it is."},"note":{"packageImported":"The BPMN file {name} inside the package was imported.","vendorData":"{vendor} data was not carried over, since BPMN 2.0 has no place for it ({total}): {list}.","unknownEvent":"The event symbol \\"{symbol}\\" has no BPMN event type, so the event has no trigger.","diamond":"{shape} is a diamond, so it became an exclusive gateway.","freeText":"{shape} is free text, so it became a text annotation.","noteShape":"{shape} is a note, so it became a text annotation.","rectangle":"{shape} is a plain rectangle, so it became a task.","anUnlabelledShape":"An unlabelled shape","unmappedLabelled":"\\"{label}\\" ({shape}) has no BPMN meaning, so it was not imported.","unlabelledShape":{"one":"An unlabelled {shape} shape has no BPMN meaning, so it was not imported.","other":"{count} unlabelled {shape} shapes have no BPMN meaning, so they were not imported."},"untitled":"untitled","aStartEvent":"a start event","anEndEvent":"an end event","anIntermediateEvent":"an intermediate event","circle":"{shape} is a circle, so it became {kind}.","anUnlabelledCircle":"An unlabelled circle","aShape":"a shape","unlabelledMaster":"An unlabelled {shape} has no BPMN meaning, so it was not imported.","shape":"shape","laneAsPool":"The lane {node} was not inside a pool, so it became a pool.","boundaryEvent":"The boundary event {node} was not on any activity, so it became an intermediate catch event.","flowNotAttached":"{flow} is not attached to two shapes, so it was left out.","flowOnLane":"{flow} is attached to a lane, which a BPMN flow cannot be, so it was left out.","dataAssociation":"A connector between a data element and {node} became a plain association, because that element cannot read or write data.","flowToPool":"{flow} ends at a pool, so it became a message flow.","flowAcrossPools":"{flow} goes from {from} to {to} in another pool, so it became a message flow.","messageInsidePool":"{flow} is a message flow inside one pool, which BPMN does not allow, so it became an association.","flowAcrossSubProcess":"{flow} crosses the border of a sub-process, which a sequence flow cannot, so it became an association.","multipleEvent":"{node} is a {kind} event; BPMN needs to know which triggers, so it is a plain event.","dataObjects":{"one":"{count} data object became data object references, which is how the editor draws them.","other":"{count} data objects became data object references, which is how the editor draws them."},"otherPage":{"one":"The page \\"{page}\\" ({shapes} shape) was not imported, only the first page with content is.","other":"The page \\"{page}\\" ({shapes} shapes) was not imported, only the first page with content is."},"otherVisioPage":{"one":"The page \\"{page}\\" ({shapes} shape) was not imported, only the first page with shapes is.","other":"The page \\"{page}\\" ({shapes} shapes) was not imported, only the first page with shapes is."},"customData":{"one":"Custom data on {count} shape was not carried over: {keys}.","other":"Custom data on {count} shapes was not carried over: {keys}."},"genericConnectors":{"one":"{count} connector not taken from the BPMN stencil was read as sequence flows.","other":"{count} connectors not taken from the BPMN stencil were read as sequence flows."},"rotated":{"one":"{count} shape is rotated; the rotation was not carried over.","other":"{count} shapes are rotated; the rotation was not carried over."},"outsidePools":{"one":"{count} element outside every pool went into the nearest pool: {names}.","other":"{count} elements outside every pool went into the nearest pool: {names}."},"unnamed":"an unnamed {kind}","vendorKept":"{vendor} data was kept in the file as it is, in its own namespace, but no engine uses it ({total}): {list}."},"summary":"Imported from {format}: {counts}.","noteSection":"{title} ({count}):","noteHeading":"{count} {title}","importedName":"imported","noteTitle":{"unmapped":"Not imported","assumed":"Guessed","lost":"Not carried over"},"count":{"element":{"one":"{count} element","other":"{count} elements"},"flow":{"one":"{count} flow","other":"{count} flows"},"pool":{"one":"{count} pool","other":"{count} pools"},"lane":{"one":"{count} lane","other":"{count} lanes"}},"cellOf":"cell {number}","addedAs":"added as {cell}","theRule":"the rule","removed":"removed","unnamedConnector":"an unnamed connector","parallelMultiple":"parallel multiple","detail":{"camunda":"Camunda extensions kept as they are: {count}.","zeebe":"Zeebe extensions kept as they are: {count}.","converted":"Flowable extensions converted to {target}: {count}."},"flowable":{"jobTypes":"Flowable classes or beans that became job types of Camunda 8: {count} ({list}); a job worker of that type has to do the work.","listeners":"Flowable execution listeners that became Camunda 8 execution listeners: {count} ({list}); a job worker of that type has to run them.","expressions":"Flowable expressions rewritten as FEEL, so check them: {count} ({list}).","kept":"Flowable extensions with no {target} equivalent, kept as they are and ignored by the engine: {count} ({list})."},"modeler":{"title":"Camunda Modeler setup found in {root}.","nothing":"No Camunda Modeler templates, settings, plugins or lint rules were found in {root}.","templatesPicked":"Element templates in {folder}: {templates} valid in {files} files, {invalid} not valid. Penstock reads this folder as it is.","templatesListed":"Element templates in {folder}: {templates} valid in {files} files, {invalid} not valid. To use them, list the folder under elementTemplates in penstock.yaml (penstock.local.yaml for a folder outside the project).","lint":"Lint rules in {file}: {known} known to Penstock Check, {unknown} not known.","lintUnknown":"Not known to Penstock Check: {list}.","settings":"Settings in {file}: {keys}. Penstock does not use them.","plugins":"Plugins found: {list}. They are only listed, never run.","diagrams":"{files} BPMN files, {camunda} with Camunda and {zeebe} with Zeebe extensions. They are never changed.","capped":"The scan stopped at its limit, so there may be more.","keymap":"Keyboard shortcuts: {mapped} of {total} of Camunda Modeler's have a Penstock action. Write the VS Code keymap with -o <file>.","skipped":{"symlink":"Skipped {path}: it is a symbolic link.","tooLarge":"Skipped {path}: it is larger than the limit.","unreadable":"Skipped {path}: it could not be read.","notJson":"Skipped {path}: it is not valid JSON of the expected kind.","tooMany":"Stopped at {path}: there are more files than the limit.","outside":"Skipped {path}: it is outside the folder."}}},"rules":{"families":{"bpmnlint":{"title":"Modelling rules","about":"The bpmnlint rules that run on every BPMN diagram, in the editor and in \`penstock check\`. Which ones run, and how strictly, is set in \`.bpmnlintrc\`."},"compat":{"title":"Engine compatibility","about":"What the engine the diagram is written for cannot run: a missing job type, an element or an expression the chosen version does not support. They run on Camunda 7 and Camunda 8 diagrams, in the editor and in \`penstock check\`, against the version in the file's \`modeler:executionPlatformVersion\`, or the newest one without it. Operaton and CIB seven are checked as Camunda 7. A finding is called \`compat/<rule>\` here and in \`penstock check\`; a rule is turned off in \`.bpmnlintrc\` as \`camunda-compat/<rule>\` or, the same, \`compat/<rule>\`."},"drawing":{"title":"Drawing","about":"What is wrong with how a diagram is drawn, found by the check card in the editor and by the first section of \`penstock check\`. The errors break the picture; the others make it harder to read."},"flow":{"title":"Process flow","about":"What the way a process is wired can do when it runs. Part of Penstock Pro, and Team in a pipeline."},"table":{"title":"Decision tables","about":"What a DMN decision table does with the inputs it can be given. Part of Penstock Pro, and Team in a pipeline."},"form":{"title":"Forms","about":"What a Camunda Form does with what the user enters. Part of Penstock Pro, and Team in a pipeline."},"code":{"title":"Diagrams and code","about":"Where a diagram and the code that runs it disagree: a step nothing implements, a worker no diagram uses, a variable read under another name than it is set."},"convention":{"title":"Modelling conventions","about":"Conventions the editor applies while modelling, so a team does not have to remember them. They are set under \`conventions\` in \`penstock.yaml\`."},"engine":{"title":"Flowable and Activiti","about":"What a Flowable or an Activiti engine ignores or cannot run: an extension of another engine, an attribute the engine does not know, an element it does not support. They run on diagrams of the Flowable and Activiti profiles, in the editor and in \`penstock check\`. A finding is called \`engine/<rule>\`."},"connections":{"title":"Connections","about":"The configuration around a diagram that is not in the diagram: the secrets and MCP clients it names, and the environment files, Docker Compose files, Helm values and Spring Boot properties that are meant to supply them. A finding is called \`connections/<rule>\`. Comparing two environments is part of Penstock Pro, and Team in a pipeline."},"cmmn":{"title":"CMMN case models","about":"What is wrong in a Camunda 7 or Flowable case model: a reference that points at nothing, an id used twice, a task with nothing to run. They run on \`.cmmn\` files in the viewer and in \`penstock check\`. A finding is called \`cmmn/<rule>\`."},"agents":{"title":"AI agents","about":"What is wrong with an AI agent of Camunda 8: a loop with no limit, a tool the model cannot understand, a secret written into the diagram, an MCP client nothing configures, an element template that 8.10 has replaced. They run on \`.bpmn\` files in the editor and in \`penstock check\`. A finding is called \`agents/<rule>\`. Rewriting an old agent to the 8.10 templates is \`penstock migrate agents\`, which writes with Penstock Pro."}},"bpmnlint/ad-hoc-sub-process":{"title":"Ad-hoc sub-process with a start or end event","why":"An ad-hoc sub-process has no defined start or end: its activities run when someone chooses, so an event marking either is meaningless.","fix":"Delete the start and end events inside the ad-hoc sub-process."},"bpmnlint/conditional-event":{"title":"Conditional event without a condition","why":"A conditional event with no condition can never fire.","fix":"Give the event a condition expression."},"bpmnlint/conditional-flows":{"title":"Conditional flow without a condition","why":"A flow that leaves a task or event marked as conditional but has no condition either always or never fires; the engine cannot tell.","fix":"Give the flow a condition, or make it an ordinary flow."},"bpmnlint/end-event-required":{"title":"Process or sub-process without an end event","why":"Without an end event the reader cannot see where the process ends, and some engines refuse to run it.","fix":"Add an end event at the end of every path."},"bpmnlint/event-based-gateway":{"title":"Event-based gateway used wrongly","why":"An event-based gateway waits for the first of several events, so it needs at least two ways out and none of them may be conditional.","fix":"Give the gateway two or more outgoing flows to events, and remove their conditions."},"bpmnlint/event-sub-process-typed-start-event":{"title":"Event sub-process start without an event","why":"An event sub-process starts when its event happens, so a blank start event says nothing about when.","fix":"Give the start event a type: message, timer, error, signal or another."},"bpmnlint/fake-join":{"title":"Several flows enter a task that does not join them","why":"Only a gateway joins flows; several flows into a task start the task once for each token, which is rarely what the drawing suggests.","fix":"Join the flows with a gateway of the matching kind before the task."},"bpmnlint/global":{"title":"Global element without a name, unused or not unique","why":"A message, signal or error that is unnamed, never used or named twice cannot be told apart from another.","fix":"Name the element, use it, or delete it."},"bpmnlint/label-required":{"title":"Element without a label","why":"An unlabelled task, event or gateway tells the reader nothing about what happens there.","fix":"Give the element a name."},"bpmnlint/link-event":{"title":"Link event without a name or without its counterpart","why":"A link throw event jumps to the link catch event of the same name in the same scope, so both need that name.","fix":"Name the link events and make each throw match one catch."},"bpmnlint/no-bpmndi":{"title":"Element without a place in the diagram","why":"An element that is in the process but not on the canvas cannot be seen, selected or fixed in the editor.","fix":"Add the element to the diagram, or delete it from the file."},"bpmnlint/no-complex-gateway":{"title":"Complex gateway","why":"A complex gateway holds logic that is written nowhere a reader can see, and few engines support it.","fix":"Replace it with exclusive, inclusive or parallel gateways."},"bpmnlint/no-disconnected":{"title":"Element with no incoming or outgoing flow","why":"An element nothing leads to or from is either forgotten or dead.","fix":"Connect the element to the flow, or delete it."},"bpmnlint/no-duplicate-sequence-flows":{"title":"Two identical flows between the same elements","why":"Two flows from the same source to the same target either do the same twice or say nothing the first one did not.","fix":"Delete the duplicate flow."},"bpmnlint/no-gateway-join-fork":{"title":"Gateway that joins and forks","why":"A gateway that joins flows and forks again in one shape is read as one of the two, and the other is missed.","fix":"Split it into one gateway that joins and one that forks."},"bpmnlint/no-implicit-end":{"title":"Path that ends without an end event","why":"A path that just stops leaves the reader to guess whether it was meant to.","fix":"Add an end event after the last element of the path."},"bpmnlint/no-implicit-split":{"title":"Task that forks the flow without a gateway","why":"Several flows out of a task start all of them at once, or none of them, depending on conditions nobody can see.","fix":"Add a gateway after the task and fork there."},"bpmnlint/no-implicit-start":{"title":"Path that starts without a start event","why":"An element with no incoming flow starts on its own, which is easy to mistake for a forgotten connection.","fix":"Add a start event before the element, or connect it to the path it belongs to."},"bpmnlint/no-inclusive-gateway":{"title":"Inclusive gateway","why":"An inclusive gateway can take any number of ways out, which is hard to read and easy to get wrong.","fix":"Use exclusive or parallel gateways, or keep it and check the conditions with care."},"bpmnlint/no-overlapping-elements":{"title":"Element overlaps another or leaves its parent","why":"Elements drawn over each other hide one another.","fix":"Move the elements apart, or lay the diagram out again."},"bpmnlint/single-blank-start-event":{"title":"More than one blank start event","why":"Two blank start events mean two ways to start the same process with no way to tell them apart.","fix":"Keep one blank start event; give the others a type, or split the process."},"bpmnlint/single-event-definition":{"title":"Event with several event definitions","why":"An event with several definitions is a multiple event, which few engines support and few readers expect.","fix":"Keep one event definition, or use one event for each."},"bpmnlint/standard-size":{"title":"Element not in its standard size","why":"Elements of the standard size make a diagram look even.","fix":"Resize the element to the standard size of its type."},"bpmnlint/start-event-required":{"title":"Process or sub-process without a start event","why":"Without a start event there is no way to start the process.","fix":"Add a start event."},"bpmnlint/sub-process-blank-start-event":{"title":"Sub-process start event with a type","why":"A sub-process starts when the flow reaches it, so its start event has no event to wait for.","fix":"Make the start event blank."},"bpmnlint/superfluous-gateway":{"title":"Gateway with one way in and one way out","why":"A gateway with one flow in and one out does nothing but sit in the way.","fix":"Delete the gateway and connect its neighbours."},"bpmnlint/superfluous-label":{"title":"Label on a flow that needs none","why":"Only the flows out of a decision, the conditional flows and the default flow say something with a label; on any other it repeats the picture.","fix":"Delete the label."},"bpmnlint/superfluous-termination":{"title":"Terminate end event that terminates nothing","why":"A terminate end event outside a parallel path ends the same as an ordinary end event, and suggests something more.","fix":"Use an ordinary end event."},"compat/ad-hoc-sub-process":{"title":"Ad-hoc sub-process without an activity","why":"An ad-hoc sub-process with nothing in it has nothing for the engine to run, so the instance can never complete it.","fix":"Add at least one activity to the ad-hoc sub-process, or delete it."},"compat/agent-fromai-contract":{"title":"fromAi() key that is not a plain name under toolCall","why":"The agent fills a tool parameter through fromAi(toolCall.name); a key written any other way is not found, so the parameter stays empty.","fix":"Write the key as toolCall.name: a single name, with dots, and no quotes, brackets or arithmetic."},"compat/agent-tool-documentation":{"title":"Tool of an AI agent without documentation","why":"The agent picks its tools by their documentation, so a tool with none is hard to choose and easy to misuse.","fix":"Describe what the tool does in its documentation."},"compat/agent-tool-output-key":{"title":"Tool of an AI agent that returns nothing to it","why":"The agent only sees what a tool puts in toolCallResult; without it, or with another spelling or a second writer, the answer is lost.","fix":"Map the result to toolCallResult, spelled exactly like that, once."},"compat/before-all-execution-listener":{"title":"beforeAll listener outside a multi-instance element","why":"A beforeAll execution listener runs before the instances of a multi-instance element are created, so on any other element it has nothing to run before.","fix":"Move the listener to a multi-instance element, or give it another event type."},"compat/element-type":{"title":"Element the engine version cannot run","why":"Each version of Camunda supports a fixed set of elements, and one it does not know is skipped or refused when the process is deployed.","fix":"Replace the element with one the version supports, or raise the platform version of the diagram."},"compat/cancel-execution-listener":{"title":"cancel listener on an element that cannot be cancelled","why":"A cancel execution listener runs when an element is terminated, which only some elements can be, so on the others it never fires.","fix":"Use the listener on an element that supports it, or give it another event type."},"compat/called-element":{"title":"Call activity without a process to call","why":"A call activity that names no process id, or a wrong kind of expression, fails when the instance reaches it.","fix":"Set the called process id, a static one or a FEEL expression."},"compat/collapsed-subprocess":{"title":"Collapsed sub-process","why":"This version of Camunda 8 cannot run a sub-process drawn collapsed on its own diagram, because it has no plane to read it from.","fix":"Expand the sub-process, or raise the platform version of the diagram."},"compat/connector-properties":{"title":"Connector with a property this version does not have","why":"A property of a connector that the engine version does not support yet is ignored, so the connector behaves differently than configured.","fix":"Remove the property, or raise the platform version of the diagram."},"compat/duplicate-execution-listener-headers":{"title":"Two headers of a listener with the same key","why":"A listener that reads a header by its key gets one of the two values, and which one is not defined.","fix":"Give each header of the listener its own key."},"compat/duplicate-execution-listeners":{"title":"Two execution listeners that are the same","why":"Two listeners with the same event type and job type run the same job twice.","fix":"Delete the duplicate listener."},"compat/duplicate-task-headers":{"title":"Two task headers with the same key","why":"A worker that reads a header by its key gets one of the two values, and which one is not defined.","fix":"Give each task header its own key."},"compat/error-reference":{"title":"Error event without an error or an error code","why":"An error event that refers to no error, or to one with no code, catches or throws nothing the engine can match.","fix":"Choose an error for the event and give the error a code."},"compat/escalation-boundary-event-attached-to-ref":{"title":"Escalation boundary event on the wrong element","why":"Escalations are raised inside a sub-process or a call activity, so a boundary event on any other element never catches one.","fix":"Attach the escalation boundary event to a sub-process or call activity."},"compat/escalation-reference":{"title":"Escalation event without an escalation or a code","why":"An escalation event that refers to no escalation, or to one without a code, catches or throws nothing the engine can match.","fix":"Choose an escalation for the event and give it an escalation code."},"compat/event-based-gateway-target":{"title":"Receive task after an event-based gateway","why":"The engine does not accept a receive task as the target of an event-based gateway, so the process is refused when it is deployed.","fix":"Use a message intermediate catch event instead of the receive task."},"compat/executable-process":{"title":"No executable process","why":"Camunda 8 only deploys processes marked executable, so a file in which none is has nothing to run.","fix":"Mark the process, or one of the pools, as executable."},"compat/execution-listener":{"title":"Execution listener without an event type or a job type","why":"A listener needs to know when it runs and which worker handles it; without either the engine refuses it.","fix":"Set the event type and the job type of the listener."},"compat/feel-compatibility":{"title":"FEEL function the engine version does not have","why":"A built-in function newer than the engine fails the expression at runtime with an incident.","fix":"Use a function the version has, or raise the platform version of the diagram."},"compat/feel":{"title":"FEEL expression that is not valid","why":"An expression the engine cannot parse fails as soon as the process reaches it, and stops the instance with an incident.","fix":"Correct the expression named in the finding; the editor of the field shows where it goes wrong."},"compat/history-time-to-live":{"title":"Process without a history time to live","why":"Without a time to live the engine keeps the history of every finished instance for ever unless it is set for the whole engine, and the database grows.","fix":"Set the history time to live of the process, for example P30D, or set it once for the engine."},"compat/implementation":{"title":"Task or event that has nothing to run","why":"A service task, business rule task, script task, send task or message event that names no job type, decision, script or message does nothing when reached.","fix":"Set what the element runs: a job type, a called decision, a script or a message name."},"compat/inclusive-gateway":{"title":"Inclusive gateway with more than one way in","why":"Camunda 8 before 8.6 can take an inclusive gateway only as a fork, so one that also joins is refused.","fix":"Use one gateway to fork and another to join, or raise the platform version of the diagram."},"compat/link-event":{"title":"Link events that do not match","why":"A link throw event jumps to the catch event with the same name in the same scope, so a name used twice or by no catch event leads nowhere.","fix":"Give every link catch event a unique name and let each throw event use one of them."},"compat/loop-characteristics":{"title":"Multi-instance without what it needs","why":"A multi-instance element with no input collection, or with an output collection but no output element, has nothing to iterate over or to gather.","fix":"Set the input collection, and the output element when there is an output collection."},"compat/io-mapping":{"title":"Input or output mapping that is incomplete","why":"A mapping needs both the source and the target it maps to; one without either is refused by the engine.","fix":"Fill in the source and the target of every input and output mapping."},"compat/message-reference":{"title":"Message event without a message or its name","why":"A message event that refers to no message, or to one without a name, can never be correlated with anything.","fix":"Choose a message for the event and give the message a name."},"compat/no-binding-type":{"title":"Binding type that this version does not have","why":"A called process, decision or form bound to anything but the latest version needs Camunda 8.6 or newer; on an older one the binding is ignored.","fix":"Bind to the latest version, or raise the platform version of the diagram."},"compat/no-business-id":{"title":"Business id that this version does not have","why":"A business id on a call activity needs Camunda 8.10 or newer; on an older version it is ignored.","fix":"Remove the business id, or raise the platform version of the diagram."},"compat/no-before-all-execution-listener":{"title":"beforeAll listener that this version does not have","why":"The beforeAll event type of an execution listener needs Camunda 8.10 or newer.","fix":"Use another event type, or raise the platform version of the diagram."},"compat/no-candidate-users":{"title":"Candidate users that this version does not have","why":"Candidate users on a user task need Camunda 8.2 or newer; on an older version they are ignored.","fix":"Remove the candidate users, or raise the platform version of the diagram."},"compat/no-cancel-execution-listener":{"title":"cancel listener that this version does not have","why":"The cancel event type of an execution listener needs Camunda 8.10 or newer.","fix":"Use another event type, or raise the platform version of the diagram."},"compat/no-execution-listener-headers":{"title":"Listener headers that this version does not have","why":"Task headers on an execution listener are not supported by this version of Camunda 8 and are ignored.","fix":"Remove the headers, or raise the platform version of the diagram."},"compat/no-execution-listeners":{"title":"Execution listeners that this version does not have","why":"Execution listeners need Camunda 8.6 or newer; on an older version they are ignored.","fix":"Remove the listeners, or raise the platform version of the diagram."},"compat/no-expression":{"title":"Expression this version does not support","why":"A FEEL expression in a property the engine version reads only as a fixed value is taken as text, not evaluated.","fix":"Write a static value, or raise the platform version of the diagram."},"compat/no-interrupting-event-subprocess":{"title":"Interrupting event sub-process in an ad-hoc sub-process","why":"An event sub-process inside an ad-hoc sub-process cannot interrupt it, so an interrupting start event is refused.","fix":"Make the start event of the event sub-process non-interrupting."},"compat/no-job-priority-definition":{"title":"Job priority that this version does not have","why":"A job priority needs Camunda 8.10 or newer; on an older version it is ignored.","fix":"Remove the job priority, or raise the platform version of the diagram."},"compat/no-loop":{"title":"Loop that never waits","why":"A cycle made only of tasks and gateways that run at once never waits for anything, so the instance spins in it and never stops.","fix":"Put an element that waits into the loop, such as a user task or a timer, or give it a gateway condition that leaves it."},"compat/no-multiple-none-start-events":{"title":"More than one blank start event","why":"Camunda 8 accepts only one blank start event in a process, so a second one makes the deployment fail.","fix":"Keep one blank start event and give the others an event type, or split the process."},"compat/no-priority-definition":{"title":"Priority that this version does not have","why":"A priority on a user task needs Camunda 8.6 or newer; on an older version it is ignored.","fix":"Remove the priority, or raise the platform version of the diagram."},"compat/no-propagate-all-parent-variables":{"title":"Propagate all parent variables that this version does not have","why":"Turning off the propagation of the parent variables of a call activity needs Camunda 8.2 or newer.","fix":"Keep propagation on, or raise the platform version of the diagram."},"compat/no-signal-event-sub-process":{"title":"Signal event sub-process that this version does not have","why":"A signal start event in an event sub-process needs a newer version of Camunda 8 than the diagram declares.","fix":"Use another kind of start event, or raise the platform version of the diagram."},"compat/no-task-schedule":{"title":"Task schedule that this version does not have","why":"A due date or follow-up date on a user task needs Camunda 8.2 or newer; on an older version it is ignored.","fix":"Remove the dates, or raise the platform version of the diagram."},"compat/no-task-listeners":{"title":"Task listeners that this version does not have","why":"Task listeners on a user task need Camunda 8.8 or newer; on an older version they are ignored.","fix":"Remove the task listeners, or raise the platform version of the diagram."},"compat/no-template":{"title":"Element template that this version does not have","why":"Element templates need Camunda 8.0 or newer; on an older version the properties they set are ignored.","fix":"Remove the template, or raise the platform version of the diagram."},"compat/no-version-tag":{"title":"Version tag that this version does not have","why":"A version tag needs Camunda 8.6 or newer; on an older version it is ignored.","fix":"Remove the version tag, or raise the platform version of the diagram."},"compat/no-zeebe-properties":{"title":"Zeebe properties that this version does not have","why":"Custom zeebe:properties need Camunda 8.1 or newer; on an older version they are dropped when the process is deployed.","fix":"Remove the properties, or raise the platform version of the diagram."},"compat/no-zeebe-user-task":{"title":"Camunda user task that this version does not have","why":"A user task implemented by Camunda itself needs Camunda 8.5 or newer.","fix":"Use a job worker user task, or raise the platform version of the diagram."},"compat/priority-definition":{"title":"User task priority that is not valid","why":"The priority of a user task has to be a whole number from 0 to 100, or an expression; anything else is refused.","fix":"Write the priority as a number from 0 to 100, or as an expression."},"compat/zeebe-user-task":{"title":"Job worker user task","why":"A user task run by a job worker is the deprecated way; a Camunda user task is the supported one from this version on.","fix":"Switch the user task to the Camunda user task implementation."},"compat/secrets":{"title":"Secret written in a form the engine no longer reads","why":"A secret referenced as {{secrets.NAME}} or in the old connector syntax is deprecated and is dropped in a later version.","fix":"Write the secret as a FEEL expression, camunda.secrets.NAME."},"compat/sequence-flow-condition":{"title":"Condition on a flow that cannot have one","why":"Only the flows that leave an exclusive or an inclusive gateway are conditional; on any other flow the condition is refused.","fix":"Delete the condition, or draw a gateway in front of the flow."},"compat/signal-reference":{"title":"Signal event without a signal or its name","why":"A signal event that refers to no signal, or to one without a name, can never be raised or caught.","fix":"Choose a signal for the event and give the signal a name."},"compat/start-event-form":{"title":"Start event form that this version cannot show","why":"Before Camunda 8.3 a start event has no form, and from 8.3 the form needs a form id or a linked form that exists.","fix":"Set the form id or the form key of the start event, or raise the platform version of the diagram."},"compat/start-event-form-embedded":{"title":"Embedded form on a start event","why":"Embedded forms on a start event are deprecated in this version and stop working in a later one.","fix":"Move the form to a .form file and link it from the start event."},"compat/subscription":{"title":"Message without a correlation key","why":"A message that a process waits for needs a correlation key, or the engine cannot tell which instance it is meant for.","fix":"Set the correlation key of the message subscription, usually a FEEL expression."},"compat/task-listener":{"title":"Task listener without an event type or a job type","why":"A task listener needs to know when it runs and which worker handles it; without either the engine refuses it.","fix":"Set the event type and the job type of the listener."},"compat/task-schedule":{"title":"Task schedule that is not a date","why":"The due date and the follow-up date of a user task have to be an ISO 8601 date, or an expression that gives one.","fix":"Write the date in ISO 8601, or use an expression."},"compat/timer":{"title":"Timer that is not valid","why":"A timer with a date, duration or cycle the engine cannot read fails when the process is deployed or reached.","fix":"Write the timer as an ISO 8601 date, duration or cycle, or as an expression."},"compat/timer-past-date":{"title":"Start timer set in the past","why":"A timer start event whose date, or whose cycle start, is already past fires right after deployment, and a cycle then runs from the deployment time.","fix":"Use a future date, or a cron expression to run on a fixed schedule."},"compat/unresolvable-secret-reference":{"title":"Secret used in a way the engine cannot resolve","why":"A secret can only be read as an expression; written as a plain string, in a list or in a branch of an if it is never replaced.","fix":"Use =camunda.secrets.NAME directly as the value of the property."},"compat/user-task-definition":{"title":"User task without a form","why":"A user task with no form opens in Tasklist with nothing for the person to read or fill in.","fix":"Link a form to the user task, or accept a task without one."},"compat/user-task-form":{"title":"User task form that is not filled in","why":"A form on a user task needs the form id, or the linked form, in the form the chosen binding expects; without it the task opens with no form.","fix":"Set the form id, or the form key, the way its binding says."},"compat/variable-name":{"title":"Variable name that is not valid","why":"A name that starts with a digit or holds a space or a dash cannot be used in a FEEL expression, so it can never be read again.","fix":"Use a name of letters, digits and underscores that does not start with a digit."},"compat/version-tag":{"title":"Version tag that is empty","why":"A version tag that is set with no value, or a binding to a version tag with none, gives the engine nothing to look up.","fix":"Give the version tag a value, or choose another binding."},"compat/wait-for-completion":{"title":"Compensation that does not wait","why":"A compensation throw event that does not wait for completion is not supported by Camunda 8, which always waits.","fix":"Turn on waiting for completion of the compensation event."},"drawing/dangling-connection":{"title":"Connection without both ends","why":"A connection that starts or ends on nothing is drawn but connects nothing, so the picture and the process disagree.","fix":"Reconnect both ends of the connection to a shape, or delete it."},"drawing/lost-connection":{"title":"Connection in the file but not on the canvas","why":"The file describes a connection that the editor did not draw, so it is invisible and cannot be selected.","fix":"Connect the two elements again on the canvas; the stray connection is dropped when the file is saved."},"drawing/containment":{"title":"Element outside the container it belongs to","why":"An element that belongs to a pool, lane or sub-process but is drawn beyond its edge reads as belonging to something else.","fix":"Drag the element back inside its container, or enlarge the container."},"drawing/overlap":{"title":"Shapes sit on top of each other","why":"Shapes drawn over each other hide one another, and the one underneath cannot be selected.","fix":"Move one of the shapes, or lay the diagram out again."},"drawing/edge-through-node":{"title":"Connection runs through a shape","why":"A connection drawn through a shape it does not touch looks like it connects to that shape.","fix":"Move a bend of the connection, or the shape, so the line goes around."},"drawing/edge-through-boundary":{"title":"Connection runs through a boundary event","why":"A connection drawn through a boundary event it does not start or end at looks like it leaves the task through that event.","fix":"Move the boundary event along the border of its task, away from where the connection meets the task."},"drawing/crossing":{"title":"Connections cross","why":"Every crossing is a place where the eye can follow the wrong line.","fix":"Move a shape so fewer connections have to cross, or lay the diagram out again."},"drawing/detached-edge":{"title":"Connection does not reach the shape it connects","why":"A connection that stops short of its shape looks unfinished and does not move with the shape.","fix":"Drag the loose end of the connection onto the shape."},"drawing/boundary-off-host":{"title":"Boundary event is off its host","why":"A boundary event that is not on the border of the task it is attached to looks like a free-standing event.","fix":"Drag the boundary event back onto the border of its task."},"drawing/label-adrift":{"title":"Label sits far from what it names","why":"A label far from its element is read as the label of something nearer.","fix":"Drag the label next to its element."},"drawing/diagonal-edge":{"title":"Connection is not drawn at right angles","why":"A BPMN diagram reads as horizontal and vertical lines; a slanted one stands out as a mistake.","fix":"Straighten the segment, or lay the diagram out again."},"drawing/label-overlap":{"title":"Labels cover each other","why":"Overlapping labels cannot be read.","fix":"Drag one of the labels aside."},"drawing/merged-edge":{"title":"Connections run along the same line","why":"Two connections drawn on top of each other read as one, so a reader loses one of them.","fix":"Move one of the connections a few pixels aside, or lay the diagram out again."},"drawing/note-adrift":{"title":"Annotation sits far from what it describes","why":"An annotation far from its element is hard to tie to it.","fix":"Drag the annotation next to the element it describes."},"drawing/semantic-drift":{"title":"The diagram means something different","why":"Laying out must move things and change nothing else; an element with a different parent, source or target is a different process.","fix":"Undo the change and report it: no layout should ever do this."},"drawing/backtrack":{"title":"Connection doubles back along itself","why":"A line that overshoots and returns along itself reads as one line and hides its own bend.","fix":"Delete the extra bend of the connection."},"drawing/edge-through-label":{"title":"Connection crosses a label","why":"A line through a label makes both harder to read.","fix":"Drag the label off the line."},"drawing/edge-along-shape":{"title":"Connection runs along the border of a shape","why":"A line lying on the edge of a shape it does not belong to looks like part of that shape.","fix":"Move the run of the connection a few pixels away from the shape."},"drawing/detour":{"title":"Connection takes a long way round","why":"A connection more than twice as long as the distance it covers makes the reader search for its end.","fix":"Move the shapes closer, or give the connection a shorter route."},"drawing/jog":{"title":"Connection sidesteps for no reason","why":"A small sidestep between two parallel runs, with nothing in the way, looks like a slip of the hand.","fix":"Delete the two bends of the sidestep."},"flow/deadlock":{"title":"The process can get stuck","why":"A token can reach a point where nothing can move it on, so the instance never ends and sits in the engine forever.","fix":"Follow the path shown in the finding and give the stuck join a way to continue, for example by joining only what was split."},"flow/no-synchronization":{"title":"A part of the process can run twice","why":"Two paths that reach the same step without a joining gateway start it once for each, so the step runs twice.","fix":"Join the paths with a gateway of the matching kind before the step."},"flow/dead-element":{"title":"An element can never run","why":"No path from the start reaches the element, so whatever it does is dead weight in the diagram.","fix":"Connect it to a path that can reach it, or delete it."},"flow/never-finishes":{"title":"The process may never finish","why":"A loop with no way out keeps its instance alive until someone cancels it.","fix":"Give the loop an exit: a condition that ends it, or a flow that leaves it."},"flow/too-complex":{"title":"Only part of the process was analysed","why":"The process has too many states to check them all, so what the check says is true only of the part it reached.","fix":"Split the process into sub-processes or call activities so each can be checked whole."},"flow/no-way-out":{"title":"A decision has no way out for some values","why":"When no condition of a gateway holds and there is no default flow, the instance stops there with an incident.","fix":"Add a default flow, or a condition for the values named in the finding."},"flow/overlap":{"title":"Two ways out of a decision can both hold","why":"When two conditions of an exclusive gateway can both be true the engine takes whichever it checks first, and which one that is depends on the order in the file.","fix":"Make the conditions exclusive, or turn one of them into the default flow."},"flow/no-default":{"title":"A decision may have no way out","why":"A gateway with conditions and no default flow stops the instance with an incident when none of them holds.","fix":"Mark one outgoing flow as the default."},"flow/lookalike":{"title":"Two variables look like one","why":"Two variable names that differ by a letter or its case are usually one name spelled twice, and one of them never holds the value the other does.","fix":"Use one spelling everywhere, or make the names differ clearly."},"table/rule-overlap":{"title":"Two rules match the same input","why":"When the hit policy expects one match, two rules matching the same input make the decision fail or depend on their order.","fix":"Narrow one of the two rules so they no longer match the same input, or change the hit policy."},"table/rule-gap":{"title":"No rule matches some input","why":"An input no rule matches gives the decision no result, and the process that asked for it stops.","fix":"Add a rule for the input named in the finding, or a catch-all rule at the end."},"table/table-unread":{"title":"A decision table could not be checked","why":"A table with an expression the check cannot read is left out of it, so its problems are not found.","fix":"Simplify the expression in the cell named in the finding, or accept that this table is not checked."},"form/key-clash":{"title":"Two fields write the same variable","why":"Tasklist and the form editor refuse to open a form in which two fields, or a field and a group, use the same key.","fix":"Give each field its own key."},"form/no-key":{"title":"A field writes no variable","why":"A field with no key is shown to the user, but what they enter is not passed to the process.","fix":"Give the field a key, the name of the process variable it should fill."},"form/repeated-option":{"title":"An option list repeats a value","why":"Two choices with the same value submit the same thing, though the user can tell them apart.","fix":"Give every option its own value."},"form/no-label":{"title":"A field has no label","why":"An input with no label leaves the user guessing what it is for.","fix":"Give the field a label."},"code/missing-implementation":{"title":"Nothing in the code runs a step","why":"A service task, send task or listener that names a job type, topic, class or bean nothing implements waits for a worker that does not exist.","fix":"Write the worker, delegate or bean, or correct the name in the diagram."},"code/never-thrown":{"title":"Nothing in the code throws the error a step catches","why":"An error boundary or error event catches a code that no BpmnError or error command in the project throws, so it never fires.","fix":"Throw the error code from the worker, or correct the code on the event."},"code/variable-typo":{"title":"A variable is read, but only a similar one is set","why":"A read of a name that is never written, when a name a letter away is, is almost always a typo, and the read gives nothing.","fix":"Use the spelling that is set."},"code/worker-fetch":{"title":"A worker reads a variable it does not fetch","why":"A Camunda 8 worker is given only the variables it asks for, so a name its code reads but its fetch list leaves out is null at runtime, and a name a fetch list holds under a different spelling is null as well.","fix":"Add the variable to the worker's fetchVariables, or use the name it fetches."},"code/writer-unread":{"title":"A worker sets a variable no step after it reads","why":"A variable the worker writes and nothing downstream reads is written for nothing; often the name is not the one the next step looks for.","fix":"Read it in a later step, or drop it from the worker."},"code/lost-update":{"title":"Every parallel instance writes the same result collection","why":"A parallel multi-instance step that sets an output collection without an output element has each instance write the same collection, so only the last one that finishes is left.","fix":"Set an output element, or collect the results in one instance after the join."},"code/late-read":{"title":"A worker reads a variable no step before it sets","why":"The worker is handed only the variables the process set before it, so a name it reads that nothing set before it is null at runtime.","fix":"Set the variable in an earlier step, or drop it from the worker."},"code/near-name":{"title":"A job type, topic, bean, message or error code is one letter off the code","why":"A name that does not match the one in the code leaves the step with nothing running it, and a name that differs only in case is the same trap with a quieter error.","fix":"Use the name the code has, or rename the worker to the one the diagram uses."},"code/mapping-order":{"title":"A mapping line reads a value an earlier line was meant to set","why":"The engine evaluates the source of every mapping line before it writes any target, so a later line that reads what an earlier one sets gets null - camunda#11789.","fix":"Move the value into the earlier line, or compute both from the same source."},"code/implicit-job-type":{"title":"A job worker takes its job type from the method name","why":"A @JobWorker without a type answers to its method name, so renaming the method changes the contract with the diagram without anything saying so.","fix":"Name the type in the annotation, so the method can be renamed freely."},"code/no-worker":{"title":"No worker handles a job type","why":"A Camunda 8 service task creates a job that waits for a worker with its job type; with none, the instance waits forever.","fix":"Write a worker for the job type, or correct the job type in the diagram."},"code/no-topic-worker":{"title":"No external task worker subscribes to a topic","why":"A Camunda 7 external task waits for a client that subscribes to its topic; with none, the instance waits forever.","fix":"Subscribe a worker to the topic, or correct the topic in the diagram."},"code/class-missing":{"title":"A class named in the diagram is not in the project","why":"A delegate or listener class the engine cannot load fails the instance at that step.","fix":"Add the class, or correct the class name in the diagram."},"code/bean-missing":{"title":"No Spring bean has the name a diagram uses","why":"A delegate expression naming a bean that does not exist fails the instance at that step.","fix":"Name the bean the diagram uses, or correct the expression."},"code/unknown-process":{"title":"A call activity calls a process no diagram defines","why":"A call to a process that is not deployed fails the instance at the call.","fix":"Add the called process to the project, or correct the id of the call."},"code/unknown-decision":{"title":"A business rule task calls a decision no file defines","why":"A call to a decision that is not deployed fails the instance at the task.","fix":"Add the decision to the project, or correct its id in the task."},"code/unknown-form":{"title":"A user task shows a form no file defines","why":"A user task that refers to a form that is not deployed opens with no form.","fix":"Add the .form file, or correct the form id in the task."},"code/unknown-embedded-form":{"title":"A user task shows an embedded form the diagram does not contain","why":"A user task that refers to an embedded form that is not in the diagram opens with no form.","fix":"Add the form to the diagram, or correct the reference."},"code/unused-worker":{"title":"A worker for a job type no diagram uses","why":"A worker that nothing calls is code to keep for nothing, and hides that a diagram lost its step.","fix":"Delete the worker, or add the step that uses its job type."},"code/unused-subscription":{"title":"A subscription to a topic no diagram uses","why":"A subscription nothing feeds is code to keep for nothing, and hides that a diagram lost its step.","fix":"Delete the subscription, or add the step that uses its topic."},"code/variable-field":{"title":"A step reads a field the variable does not have","why":"A field the type of a variable does not have is null at runtime, and a misspelt field name is the usual cause. Only a variable whose type is known from the code that sets it is checked, so a field of a type the project does not declare is never reported.","fix":"Use a field the type has, or correct the name; a field the code adds later is named in its class."},"code/variable-unknown":{"title":"A step reads a variable nothing sets","why":"A name no step of the diagram or the code sets, and that the process is not declared to start with under variables.inputs, is null unless something outside starts the process with it.","fix":"Set the variable in an earlier step, declare it under variables.inputs in penstock.yaml, or correct the name."},"convention/id-from-name":{"title":"Ids follow names","why":"Ids that read as names make diffs, logs, test cases and worker code readable, and stay right when a step is renamed.","fix":"Set \`conventions.ids.fromName: true\` in \`penstock.yaml\`; \`conventions.ids.pattern\` shapes the id, \`{Type}_{Name}\` by default."},"convention/defaults":{"title":"Defaults for new elements","why":"Attributes every service task or data input of a project needs, set once, are never forgotten on one of them.","fix":"Set them under \`conventions.defaults\` in \`penstock.yaml\`, keyed by BPMN type such as \`bpmn:ServiceTask\`."},"compat":{"badBoundaryHost":"{subject} is attached to something that cannot have this kind of boundary event","callsNoDecision":"{subject} calls no decision and has no job type","callsNoProcess":"{subject} calls no process","cannotUseExpression":"{subject} cannot use an expression in its {property}","conditionNotAllowedHere":"{subject} has a condition, but only the flows out of an exclusive or inclusive gateway can have one","deprecatedSecret":"{subject} writes a secret in a form that is deprecated","duplicateLinkName":"Two link catch events use the same name","element":"element","elementNeedsVersion":"{elements} need Camunda {allowed} or newer{targets}","expressionNeeds":"{subject} uses an expression in its {property}, which {needs}","fallback":"{subject}: {message}","formWithNoId":"{subject} has a form with no form id","hasNoForm":"{subject} has no form","hasNoJobType":"{subject} has no job type","hasNoScript":"{subject} has no script and no job type","here":"here","historyTimeToLiveMissing":"History time to live is missing","invalidAgentSetting":"{subject} has an AI agent setting that is not valid","invalidFeelExpression":"{subject} has a FEEL expression that is not valid","isCollapsed":"{subject} is collapsed, and this version of Camunda needs it expanded","isJobWorkerUserTask":"{subject} is a job worker user task, and a Camunda user task is the supported kind","joinOr":"{list} or {last}","loopThatNeverWaits":"{subject} is part of a loop that never waits","messageWithoutCorrelationKey":"{subject} waits for a message that has no correlation key","missingExtension":"{subject} is missing its {required} settings","missingInputCollection":"{subject} is multi-instance, but its input collection is missing","missingProperty":"{subject} is missing its {list}","moreThanOneBlankStart":"There is more than one blank start event, and Camunda allows one in a process","moreThanOneElement":"There is more than one {kind} in the same scope, and only one is allowed","needs":"needs Camunda {allowed} or newer{targets}","needsConditionOrDefault":"{subject} needs a condition, or must be the default flow of its gateway","needsPropertyBefore":"{subject} needs its {list} on versions before Camunda {allowed}{targets}","noActivityInside":"{subject} has no activity inside it","notExecutable":"{subject} is not marked as executable","receiveTaskAfterGateway":"A receive task cannot follow an event-based gateway in Camunda 8; use a message catch event","targets":" - this diagram targets {version}","theKind":"The {kind}","thisElement":"This element","unreadableVariableName":"{subject} uses a variable name the engine cannot read","unresolvableSecret":"{subject} refers to a secret in a way the engine cannot resolve","unsupportedFeelFunction":"{subject} uses a FEEL function that Camunda {version} does not have","usesProperty":{"a":"{subject} uses a {property}, which {needs}","an":"{subject} uses an {property}, which {needs}"},"usesExtension":{"a":"{subject} uses a {extension}, which {needs}","an":"{subject} uses an {extension}, which {needs}"},"propertyValueNeeds":{"a":"{subject} has a {property} value that {needs}","an":"{subject} has an {property} value that {needs}"},"propertyValueNotAllowed":{"a":"{subject} has a {property} value that is not allowed here","an":"{subject} has an {property} value that is not allowed here"},"deprecatedProperty":{"a":"{subject} uses a {property}, which is deprecated","an":"{subject} uses an {property}, which is deprecated"},"cannotHaveProperty":{"a":"{subject} cannot have a {property}","an":"{subject} cannot have an {property}"},"cannotHaveExtension":{"a":"{subject} cannot have a {extension}","an":"{subject} cannot have an {extension}"},"refersToNoMessage":"{subject} refers to no message","refersToNoError":"{subject} refers to no error","refersToNoSignal":"{subject} refers to no signal","refersToNoEscalation":"{subject} refers to no escalation","word":{"adHoc":"ad-hoc","agentDefinition":"agent definition","assignmentDefinition":"assignment definition","bindingType":"binding type","body":"body","businessId":"business id","calledDecision":"called decision","calledElement":"called element","cancelRemainingInstances":"cancel remaining instances","candidateUsers":"candidate users","completionCondition":"completion condition","conditionExpression":"condition expression","consumeUnmatchedEvents":"consume unmatched events","correlationKey":"correlation key","decisionId":"decision id","deduplicationModeManualFlag":"deduplication mode manual flag","dueDate":"due date","errorCode":"error code","errorRef":"error reference","escalationCode":"escalation code","escalationRef":"escalation reference","eventType":"event type","executionListeners":"execution listeners","expression":"expression","externalReference":"external reference","followUpDate":"follow up date","formDefinition":"form definition","formId":"form id","formKey":"form key","headers":"headers","historyTimeToLive":"history time to live","incoming":"incoming","inputCollection":"input collection","inputElement":"input element","ioMapping":"io mapping","isExecutable":"is executable","isInterrupting":"is interrupting","jobPriorityDefinition":"job priority definition","loopCharacteristics":"loop characteristics","messageRef":"message reference","messageTtl":"message ttl","modelerTemplate":"modeler template","name":"name","outputCollection":"output collection","outputElement":"output element","priority":"priority","priorityDefinition":"priority definition","processId":"process id","propagateAllParentVariables":"propagate all parent variables","properties":"properties","resultVariable":"result variable","script":"script","signalRef":"signal reference","source":"source","subscription":"subscription","target":"target","taskDefinition":"task definition","taskHeaders":"task headers","taskListeners":"task listeners","taskSchedule":"task schedule","timeCycle":"time cycle","timeDate":"time date","timeDuration":"time duration","type":"type","userTask":"user task","userTaskForm":"user task form","value":"value","versionTag":"version tag","waitForCompletion":"wait for completion"}},"defects":{"boundaryOffHost":"{event} off {host}","containment":"{id} {relation} {box}","crossing":"[{aType}|{bType}] {a} ({aFrom}->{aTo}) x {b} ({bFrom}->{bTo})","detour":"[{type}] {id} runs {run}px for {apart}px","edgeAlongShape":"{connection} runs along {shape}","edgeOverLabel":"{connection} over {owner} label","edgeThroughBoundary":"{connection} through {event} on {host}","edgeThroughNode":"{connection} through {shape}","insideForeign":"inside foreign","labelFromLine":"{id} label {gap}px from its own line","labelFromShape":"{id} label {gap}px from its shape","labelOverLabel":"{owner} label over {other} label","labelOverShape":"{owner} label over {shape}","mergedEdge":"[{aType}|{bType}|{axis}] {a} ({aFrom}->{aTo}) with {b} ({bFrom}->{bTo}) over {run}px","noteAdrift":"{id} ({from}->{to}) runs {span}px","outsideIts":"outside its","overlap":"{a} <-> {b}","semanticDrift":"{id} was {was}, now {now}","straddles":"straddles","typedWire":"[{type}] {id} ({from}->{to})","wire":"{id} ({from}->{to})"},"drawing":{"listSeparator":", ","noProblemsFound":"No problems found.","readability":"{number} readability","rulesCouldNotRun":"The bpmnlint rules could not run.","theConnection":"the connection from {from} to {to}","theElement":"the {type}","errors":{"one":"{count} error","other":"{count} errors"},"warnings":{"one":"{count} warning","other":"{count} warnings"}},"flow":{"above":"above","anActivity":"an activity","and":" and ","arrive":"arrive","arrives":"arrives","atLeast":"at least","atMost":"at most","below":"below","bothConditionsHold":"When {shared}, both {first} and {second} of {gateway} hold; the engine takes whichever it checks first.","comma":", ","exclusive":" (exclusive)","hasAnyValue":"{variable} has any value","isAnythingBut":"{variable} is anything but {values}","isBetween":"{variable} is between {lo} and {hi}{exclusive}","isBound":"{variable} is {side} {bound}","isSomeOtherValue":"{variable} is some other value","isValue":"{variable} is {bound}","leftThroughBoundary":" The run left {host} through its boundary event{event} and never came back.","letterCaseOnly":"letter case only","lookalikeNames":"\\"{first}\\" and \\"{second}\\" are used in this process and differ by {difference}: one of them is probably a typo, and would never hold the value the other one does.","neverRuns":"{node} never runs: {cause}.","noDefaultFlow":"{gateway} has no default flow. If none of its conditions holds, the process stops there with an incident.","noPathReachesIt":"no path from a start event reaches it","noPathToAnEnd":"Once the process reaches {nodes}, no path leads to an end: it can only go round.","noWayOut":"{gateway} has no flow to take when {gaps}, and no default flow: the process stops there with an incident.","nodeBefore":"the {node} before \\"{next}\\"","nothingLeadsToIt":"nothing leads to it","oneCharacter":"one character","orWhen":", or when ","sentDownAnotherBranch":" {turn} sent this run down another branch.","theBranchThrough":"the branch through the {node}","theFlowTo":"the flow to {target}","theNextStep":"the next step","theNode":"the {node}","tooManyStates":"The process has more than {states} reachable states; the findings cover the part that was explored.","twoBranchesAtOnce":"Two branches that run at the same time both reach {node}, so it runs twice. Join them with a parallel gateway first.","twoTokensAtOnce":"Two tokens can arrive at {node} at once, so it runs twice. A parallel split usually needs a parallel join, not an exclusive one.","waitsAndCannotContinue":"{who} waits and cannot continue.","waitsFor":"{who} waits for {missing}, which never {arrives}."},"form":{"keyClash":"{fields} {all} write {variable}. A form like that does not open: Tasklist and the form editor refuse it.","keyClashGroup":"{field} writes {variable}, which {group} also uses to hold its fields. A form like that does not open: Tasklist and the form editor refuse it.","noKey":"{field} has no key, so what the user enters is not passed to the process.","noLabel":"The {type} writing {variable} has no label, so the user sees an input with nothing to say what it is for.","repeatedOption":"{field} offers the value {values} more than once, so two choices the user can tell apart submit the same thing.","unnamedField":"the {type}{key}{id}"},"lint":{"couldNotRun":"The rule could not run: {message}","decidesNothing":"{what} has one way in and one way out, so it decides nothing","discouragedGateway":"{what} is a kind of gateway that is discouraged","endsWithoutEndEvent":"{what} ends the flow without an end event","hasNoEndEvent":"{what} has no end event","hasNoName":"{what} has no name","hasNoShape":"{what} has no shape on the diagram","hasNoStartEvent":"{what} has no start event","itsContainer":"{what} lies outside {parent}","itsLane":"its lane","itsPool":"its pool","itsShape":"the shape it belongs to","itsSubProcess":"its sub-process","joinedWithoutGateway":"{what} is joined by several flows without a gateway","joinsAndSplits":"{what} both joins and splits the flow, which reads as two gateways","linkEvent":"{what}: {message}","lowercaseLink":"link ","moreThanOneBlankStart":"{what} has more than one blank start event","needsConditionOrDefault":"{what} needs a condition or must be the default flow","notConnected":"{what} is not connected to anything","overlapsAnotherShape":"{what} overlaps another shape","splitsWithoutGateway":"{what} splits the flow without a gateway","startsWithoutStartEvent":"{what} starts the flow without a start event","theElement":"The {type}","thisElement":"This element","twoIdenticalFlows":"{what} has two identical flows","unneededTermination":"{what} ends the process with a termination it does not need","conditionalEventNoCondition":"Conditional event is missing a condition","eventBasedGatewayNeedsTwo":"An <Event-based Gateway> must have at least 2 outgoing <Sequence Flows>","flowOutOfEventBasedGatewayConditional":"A <Sequence Flow> outgoing from an <Event-based Gateway> must not be conditional","typedStartEventNoDefinition":"Start event is missing event definition","eventHasSeveralDefinitions":"Event has multiple event definitions","startEventMustBeBlank":"Start event must be blank","sequenceFlowSuperfluousLabel":"Sequence flow has superfluous label","startEventInAdHoc":"A <Start Event> is not allowed in <Ad Hoc Sub Process>","endEventInAdHoc":"An <End Event> is not allowed in <Ad Hoc Sub Process>","nonStandardWidth":"Element has a non-standard width; expected width of {width}","nonStandardHeight":"Element has a non-standard height; expected height of {height}","nonStandardSize":"Element has a non-standard size; expected {width}x{height}"},"table":{"aDecision":"a decision","and":" and ","differentResults":", and give different results","input":"input {number}","orWhen":"; or when ","ruleGap":"In \\"{decision}\\", no rule matches when {cases}, so the decision returns nothing there.","ruleOverlap":"In \\"{decision}\\", rules {first} and {second} both match when {when}{different}; with hit policy {policy} that is an error at run time.","someOtherValue":"some other value","unread":"\\"{decision}\\" uses expressions in its rules that are more than comparisons, ranges and lists, so its rules were not compared.","whenIs":"{label} is {value}"},"web":{"detailWithPath":"{detail} Path: {path}","flowAnalysisHint":"Deadlocks, branches that run twice, steps that never run. Part of Penstock Pro.","migrateToCamunda8":"Migrate to Camunda 8","nothingToConvert":"Nothing to convert: this is not a Camunda 7 diagram.","path":"Path: {path}","readability":"Readability ({number})","rulesCouldNotRun":"The bpmnlint rules could not run: {failure}. Rules from a bpmnlint plugin need lint.clientBundlePath in penstock.yaml.","flowAnalysisFound":{"one":"Flow analysis found 1 problem in how this process runs","other":"Flow analysis found {count} problems in how this process runs"}},"workers":{"aWorkerIsWorking":"a worker is working on its tasks","engineAnswered":"The engine answered {status}","noJobStatistics":"The engine does not report job statistics, which it does from Camunda 8.9","noJobs":"no jobs in the last 24 hours","noOpenTasks":"no open tasks","nobodyTookThem":"{jobs} in the last 24 hours and no worker took one","refusedTheQuestion":"The engine refused the question ({status}): the profile's credentials may not allow reading jobs","tasksWait":"tasks wait and no worker has locked one","tookItsJobs":"{workers} took its jobs in the last 24 hours","workerCount":{"one":"{count} worker","other":"{count} workers"},"jobCount":{"one":"{count} job","other":"{count} jobs"}},"theKindOf":"the {kind}","engine/foreign-extension":{"title":"Extension of another engine","why":"Flowable and Activiti ignore the attributes and elements of the Camunda, Zeebe, Operaton and each other's namespaces, so what they set is silently lost at run time.","fix":"Replace it with the extension of the engine the diagram is written for, or remove it."},"engine/unknown-attribute":{"title":"Attribute the engine does not know","why":"An attribute in the engine's own namespace that the engine does not read is usually a typo, and has no effect.","fix":"Correct the attribute name, or remove it."},"engine/attribute-not-allowed":{"title":"Attribute on the wrong kind of element","why":"An engine attribute is read only on the elements it is defined for, so on any other element it has no effect.","fix":"Move the attribute to an element that takes it, or remove it."},"engine/unsupported-element":{"title":"Element the engine does not support","why":"An element that Flowable or Activiti cannot execute fails the deployment or never runs.","fix":"Replace the element with one the engine supports."},"engine/service-task-implementation":{"title":"Service task with nothing to run","why":"A service task without a class, an expression, a delegate expression or a type has nothing for the engine to call, so the deployment is refused.","fix":"Set one of class, expression, delegateExpression or type on the service task."},"engine/script-format":{"title":"Script task without a script format","why":"The engine does not guess the language of a script, so a script task without scriptFormat cannot run.","fix":"Set the script format of the task, for example groovy or javascript."},"engine/feel-expression":{"title":"FEEL expression in a Flowable or Activiti diagram","why":"Flowable and Activiti evaluate JUEL expressions in \${...}; an expression that starts with = is FEEL, which they do not read.","fix":"Write the expression in JUEL, as \${...}."},"engineCheck":{"foreignExtension":"{subject} uses {names} from {owner}, which {engine} does not read, so what they set is lost at run time","unknownAttribute":"{subject} has the attribute {name}, which {engine} does not know","attributeNotAllowed":"{subject} has the attribute {name}, which the engine reads only on other kinds of element","unsupportedElement":"{subject} is an element that {engine} does not support","noImplementation":"{subject} has nothing to run: no class, expression, delegate expression or type","noScriptFormat":"{subject} has no script format, so the engine cannot tell which language the script is in","feelExpression":"{subject} uses a FEEL expression, which {engine} does not read; write it in JUEL as \${...}"},"connections/secret-undefined":{"title":"Secret that no file of the project defines","why":"A diagram that names a secret nothing in the project supplies runs with an empty value, and the task fails when the connector reads it. Secrets that only exist in a cloud console or a vault cannot be seen from here, so this is a warning.","fix":"Add the secret to connector-secrets.txt, .env, the Compose environment or the Helm values, or correct the name in the diagram."},"connections/secret-prefix":{"title":"Secret that is defined without the configured prefix","why":"When a secret prefix is configured, the connector runtime reads only the environment variables that start with it, so a variable of the right name without the prefix is ignored.","fix":"Rename the variable to the prefix followed by the secret name, or remove the prefix setting."},"connections/mcp-client-undefined":{"title":"MCP client that no configuration defines","why":"An MCP client connector looks its client id up in the runtime configuration; with no client of that id the task fails every time.","fix":"Add the client under camunda.connector.agenticai.mcp.client.clients, or correct the client id in the diagram."},"connections/property-renamed":{"title":"Property with its Camunda 8.7 name","why":"Camunda 8.8 renamed the properties of the Spring client to camunda.client.*. The old names still work for now, through a compatibility mapping that is removed in a later version.","fix":"Rename the property to the name given in the finding."},"connections/property-removed":{"title":"Property that Camunda 8.8 no longer reads","why":"Some 8.7 properties have no 8.8 counterpart: the plaintext switch is replaced by the scheme of the address, and the Operate and Tasklist clients are replaced by the Camunda client.","fix":"Remove the property, and write http:// or https:// in the address where the plaintext switch was."},"connections/secret-missing-in-env":{"title":"Secret defined in one environment and missing in another","why":"A secret the source environment supplies and the target does not is empty there, so a diagram that works in one fails in the other after the deployment.","fix":"Add the secret to the target environment before deploying."},"connections/key-missing-in-env":{"title":"Setting defined in one environment and missing in another","why":"A property or an MCP client that one environment configures and the other does not behaves differently there, often by silently using a default.","fix":"Add the setting to the target environment, or confirm that the default is what it needs."},"cmmn/duplicate-id":{"title":"Id used twice","why":"Every element of a case model is found by its id, so a second element with the same id makes every reference to it ambiguous and the engine refuses the model.","fix":"Give one of the elements a new id and update the references to it."},"cmmn/definition-ref-missing":{"title":"Plan item that points at no definition","why":"A plan item is only a place in the plan; what it does is its definition. Without a definitionRef that names a task, stage, milestone or event listener, the item does nothing and the engine refuses the model.","fix":"Set definitionRef on the plan item to the id of its definition, or delete the plan item."},"cmmn/dangling-sentry-ref":{"title":"Criterion that points at a sentry that is not there","why":"An entry or exit criterion names its sentry by sentryRef; if no sentry has that id, the criterion can never be satisfied, so the plan item never starts or never ends.","fix":"Point sentryRef at an existing sentry, or add the sentry."},"cmmn/dangling-on-part":{"title":"Sentry that waits for a plan item that is not there","why":"An on-part of a sentry waits for a standard event of the plan item named by sourceRef; with no such plan item the sentry never fires.","fix":"Point sourceRef at an existing plan item, or delete the on-part."},"cmmn/task-without-target":{"title":"Task that names nothing to run","why":"A process task, case task or decision task without the process, case or decision it calls starts nothing when it runs.","fix":"Set the process, case or decision the task calls."},"cmmn/no-case-plan-model":{"title":"Case without a case plan model","why":"The case plan model is the root of a case; without one there is nothing to run or to draw.","fix":"Add a casePlanModel to the case."},"cmmn/plan-truncated":{"title":"Plan that is shown only in part","why":"A stage that contains itself, directly or through other stages, would be drawn forever, and a case plan with more than 10000 plan items is not drawn whole. The viewer stops there and shows what it has.","fix":"Remove the plan item that puts a stage inside itself, or split the case into smaller cases."},"agents/no-model-call-limit":{"title":"AI agent without a limit on model calls","why":"An agent calls the model again after every round of tool calls. With no limit on the number of calls, a model that keeps asking for tools runs, and is paid for, until something else stops it.","fix":"Set the maximum number of model calls in the Limits group of the agent."},"agents/tool-without-description":{"title":"Tool of an AI agent without a description","why":"The model chooses a tool from its name and its description, and the description is the documentation of the element. A tool with none is guessed at or never used.","fix":"Write what the tool does and when to use it in the documentation of the element."},"agents/fromai-incomplete":{"title":"fromAi() parameter without a description or a type","why":"fromAi() is how a tool tells the model which parameters it takes. Without a description the model does not know what to put there, and without a type it sends text where a number or a list may be needed.","fix":"Give the call a description and a type: fromAi(toolCall.name, \\"What it is\\", \\"string\\")."},"agents/tool-filter-matches-nothing":{"title":"MCP tool filter that lets nothing through","why":"The included list of an MCP client is empty, or every name in it is also in the excluded list, which wins. The agent gets no tool from that client, though the client is there.","fix":"Remove the filter, or put at least one name in the included list that the excluded list does not name."},"agents/duplicate-tool-names":{"title":"Two tools of an agent with the same name","why":"The model calls a tool by its name, which is the id of the element, and an MCP client by its client id. Two tools whose names differ only by capitals, or two MCP clients with one client id, give it the same name twice and it cannot tell them apart.","fix":"Give one of them another id, or use one MCP client."},"agents/adhoc-without-agent":{"title":"Tool container that no agent uses","why":"An ad-hoc sub-process marked as the tool container of an agent, or holding MCP clients or tools written for one, does nothing when no AI agent task names it and it is not an agent itself.","fix":"Name the sub-process in the Tools element ID of the agent task, make it the agent, or take the agent marks out of it."},"agents/mcp-client-no-config":{"title":"MCP client of an agent that no configuration defines","why":"An MCP client element looks its client id up in the runtime configuration. With no client of that id in the project, the agent has a tool that fails every time it is called.","fix":"Add the client under camunda.connector.agenticai.mcp.client.clients, or correct the client id in the diagram."},"agents/plain-text-secret":{"title":"API key or secret written into the diagram","why":"A key typed into a field is saved in the file, in version control and in every copy of the diagram, and anyone who can read the diagram can use it.","fix":"Create a connector secret and write {{secrets.NAME}} in the field."},"agents/deprecated-template":{"title":"Agent on a deprecated 8.9 element template","why":"Camunda 8.10 replaces the 8.9 AI agent templates with version 2 of the task and the sub-process agent, and deprecates the old ones. They still run, but get no new options and are removed in a later version.","fix":"Run penstock migrate agents to rewrite the agent to the 8.10 template, or apply the new template in the Modeler."}},"element":{"kind":{"adHocSubProcess":{"one":"ad-hoc sub-process","other":"ad-hoc sub-processes"},"association":{"one":"association","other":"associations"},"boundaryEvent":{"one":"boundary event","other":"boundary events"},"businessRuleTask":{"one":"business rule task","other":"business rule tasks"},"callActivity":{"one":"call activity","other":"call activities"},"complexGateway":{"one":"complex gateway","other":"complex gateways"},"dataObject":{"one":"data object","other":"data objects"},"dataObjectReference":{"one":"data object reference","other":"data object references"},"dataStore":{"one":"data store","other":"data stores"},"dataStoreReference":{"one":"data store reference","other":"data store references"},"endEvent":{"one":"end event","other":"end events"},"eventBasedGateway":{"one":"event-based gateway","other":"event-based gateways"},"exclusiveGateway":{"one":"exclusive gateway","other":"exclusive gateways"},"group":{"one":"group","other":"groups"},"inclusiveGateway":{"one":"inclusive gateway","other":"inclusive gateways"},"intermediateCatchEvent":{"one":"intermediate catch event","other":"intermediate catch events"},"intermediateThrowEvent":{"one":"intermediate throw event","other":"intermediate throw events"},"lane":{"one":"lane","other":"lanes"},"manualTask":{"one":"manual task","other":"manual tasks"},"messageFlow":{"one":"message flow","other":"message flows"},"parallelGateway":{"one":"parallel gateway","other":"parallel gateways"},"participant":{"one":"participant","other":"participants"},"process":{"one":"process","other":"processes"},"receiveTask":{"one":"receive task","other":"receive tasks"},"scriptTask":{"one":"script task","other":"script tasks"},"sendTask":{"one":"send task","other":"send tasks"},"sequenceFlow":{"one":"sequence flow","other":"sequence flows"},"serviceTask":{"one":"service task","other":"service tasks"},"startEvent":{"one":"start event","other":"start events"},"subProcess":{"one":"sub-process","other":"sub-processes"},"task":{"one":"task","other":"tasks"},"textAnnotation":{"one":"text annotation","other":"text annotations"},"transaction":{"one":"transaction","other":"transactions"},"userTask":{"one":"user task","other":"user tasks"}}},"targets":{"onForm":"form {form}"},"preview":{"after":"After","before":"Before","fileAdded":"File added","fileDeleted":"File deleted"},"vscode":{"action":{"openAnEditor":"Penstock: open a Penstock editor to use {title}.","unavailableHere":"Penstock: {title} is not available for this diagram."},"codeLinks":{"diagramsUsing":"The diagrams that use {name}:{line}","forTitle":"Code for {title}","nothingUses":"No code in this project uses {title}","place":"{title} · line {line}","unreadable":"The code links could not read this project: {reason}","whereUsed":"Where it is used","didYouMean":"Did you mean '{name}'?","caseSensitive":"Names are case-sensitive, the diagrams use '{name}'","changeTo":"Change to '{name}'","unknown":{"process":"No diagram in the project has a process '{name}'","element":"No diagram in the project has an element '{name}'","message":"No diagram in the project has a message '{name}'","decision":"No decision in the project is '{name}'","error":"No error event in the project's diagrams catches '{name}'","variable":"No diagram in the project uses a variable '{name}'"},"workerVariable":{"notFetched":"The worker does not fetch '{name}', so it is null at runtime","notRead":"Nothing in the project's diagrams reads '{name}'","notSet":"Nothing in the project's diagrams sets '{name}'{only}","onlySet":", only '{name}' is set","setBefore":"{message} before this step"},"namedWorker":"The diagrams use the method name '{name}' as the job type, so renaming the method breaks them","nameJobType":"Name the job type '{name}'","unknownElement":{"noElement":"No element '{name}' in {owner}","caseSensitive":"the diagrams use '{name}', and names are case-sensitive"}},"config":{"created":"penstock.yaml created. The engine you picked is recorded in the project.","updated":"penstock.yaml updated. The engine you picked was added to the file; nothing else in it was touched."},"diff":{"aBranch":"a branch","aBranchDetail":"compare with another branch","anotherFile":"another file","anotherFileDetail":"compare with a diagram from anywhere on this machine","committedDetail":"the version that is committed","compareWith":"Compare {name} with","compareWithBranch":"Compare with the branch","compareWithTitle":"Compare with","gone":"That comparison is not open any more. Compare the diagram again.","openOneFirst":"Open a BPMN diagram to compare, or pick one in the explorer."},"document":{"changeRefused":"VS Code did not accept the change to {name}","editorNotBuilt":"The Penstock editor was not built. Run npm run build in the vscode folder."},"docs":{"notWebAddress":"The address {url} is not a web address, so it was not opened"},"file":{"noWorkspace":"There is no workspace folder to write into"},"git":{"noSuchRef":"{ref} has no {name}: {reason}","notInRepository":"{file} is not in a git repository, so there is no {ref} of it to compare with"},"hooks":{"noSuchRun":"No such hook run"},"licence":{"accountHeading":"Penstock {tier}: {detail}.","active":"Penstock {tier} is active on this machine. The CLI uses it too.","activeAgain":"Penstock {tier} is active on this machine again. The CLI uses it too.","activatedAgo":"since {when}","alreadyBought":"I already bought it","askEmail":"E-mail you bought Penstock with:","askPaidEmail":"E-mail you paid with:","buyPro":"Buy Pro","buyTeam":"Buy Team","buyTier":"Buy {tier}","checkoutExpired":"The checkout expired. Open a new one to buy Penstock.","checkoutFailed":"The payment did not go through, and nothing was charged.","checkoutOpened":"The checkout for Penstock {tier} is open in your browser; this finishes by itself once you have paid.","checkoutStopped":"Stopped waiting for the payment after an hour. If you paid, sign in with that address.","clipboard":"The licence key is on the clipboard. Keep it secret; in a pipeline, set it as PENSTOCK_LICENSE.","codeSent":"A sign-in code is on its way to {email}. Code from the e-mail:","copyKeyForCi":"Copy key for CI","entryPlaceholder":"you@example.com or PENSTOCK-PRO-...","entryPrompt":"E-mail or licence key. The address you bought Penstock with gets a code, and the licence sets itself up.","neither":"That is neither an e-mail address nor a Penstock licence key.","noLicence":"There is no Penstock licence bought with {email}.","noLicenceWithSignIn":"There is no Penstock licence bought with {email}. Buy one, or sign in with the address you bought it with.","notNow":"Not now","offerText":"{title} is part of Penstock {tier}. It {gives}.{ended} The licence reaches this machine by itself once you have paid.","onlyTeam":"Only a Penstock Team key works in a pipeline.","paid":"Paid, thank you. One last step and Penstock sets itself up.","releaseCleared":"There was no seat on this machine to release; the licence file was cleared.","releaseNone":"There is no licence on this machine to release, or the licence service could not be reached.","releaseThisMachine":"Release this machine","released":"The licence was released from this machine; it can be used on another.","seatsFull":"Your {tier} licence is in use on {count} machines, which is as many as it allows. Free one for this machine:","signIn":"Sign in","statusFree":"Penstock Free","statusTier":"Penstock {tier}","statusTrial":"Penstock Pro trial: {days}d","suggestText":"{title} is part of Penstock {tier}: it {gives}.","trialEnded":"Your {count}-day trial has ended.","trialEndedTooltip":"Pro trial ended on {date}. Penstock Free continues. Click for plans.","unreachable":"The licence service could not be reached: {reason}","widget":"Penstock Licence","feature":{"autoLayout":{"title":"Auto layout","gives":"turns a tangled diagram into a readable left-to-right flow"},"codeLinks":{"title":"Diagrams linked to the code","gives":"connects the diagrams with the code that runs them: the way from a step to its worker and back, usages, Code Vision, variables and error codes across both, renaming one side with the other, tests run from the diagram, and coverage on it"},"conventions":{"title":"Modelling conventions","gives":"names ids and fills in attributes the way penstock.yaml says, as you model"},"flowAnalysis":{"title":"Flow analysis","gives":"finds deadlocks, branches that run twice and steps that can never run, and shows the path that leads there"},"migration":{"title":"Camunda 7 to Camunda 8 conversion","gives":"converts a diagram for Camunda 8 with a visual preview before anything is written, marks what it could not convert on its element, and writes job workers from the code of your delegates"},"testRuns":{"title":"Process test runs","gives":"runs a process step by step against a local engine, with mocks, and shows what every step received and changed"},"aiChat":{"title":"AI chat","gives":"shows the changes an agent that speaks the Agent Client Protocol proposes to your diagrams on the canvas, for you to accept or reject"},"variableChecks":{"title":"Variable checks","gives":"finds the fields and names a step reads that the code that sets them lacks"},"apiTemplates":{"title":"Templates from an API description","gives":"writes a REST connector element template for every operation of an OpenAPI, Swagger or Postman file, with typed inputs, authentication from its security schemes and error handling"},"connectionsEnvironments":{"title":"Environment comparison for connections","gives":"lists the secrets, MCP clients and settings that one environment lacks compared with another, so you see what the one you deploy to is missing before you deploy"},"incidentScenario":{"title":"Reproduce an incident as a scenario","gives":"turns an incident into a scenario that starts the process with its start values, drives the path it took and ends on the same incident, runs it, and checks a proposed fix against it"},"agentTools":{"title":"Agent scenarios and migration","gives":"writes the scenario of an AI agent process with the model stubbed, and rewrites the agent elements of old Camunda templates to the current agent templates"},"aiReceipt":{"title":"Verification receipt for AI changes","gives":"writes a receipt of what an AI agent's change did to your files (what was added, removed or changed, the new problems it brought, the scenarios that ran), hands new problems back to the agent to fix, keeps the receipt as a file, and fails a pipeline when an agent's change has none"},"dmnTests":{"title":"DMN test table","gives":"runs saved test cases on a decision table, shows which rules each case matched and which rules no case covers, and fails a pipeline when rule coverage falls below a minimum"},"migrationProof":{"title":"Migration proof on both engines","gives":"runs your scenarios on the original Camunda 7 diagram and on the converted Camunda 8 diagram, each on its own test engine, and shows for every scenario whether the converted process behaves the same or where it first differs"},"policyPack":{"title":"Policy pack in git","gives":"writes your team’s rules, severities, conventions, palette, element templates and baselines into a folder in git, pins it by hash, locks those settings in the editor, and fails a pipeline when the pack was changed, a rule was weakened or a required check did not run"},"promotion":{"title":"Environment promotion and drift","gives":"shows which resources of an environment differ from your files, plans and takes exactly what was verified on one environment to the next, names the secrets the target lacks, and refuses a protected environment without a typed confirmation or, in a pipeline, an approval record"},"auditEvidence":{"title":"Audit evidence pack","gives":"writes one reviewable package for a release: the diagrams as pictures, the check, scenario and DMN test results, the changes since the last tag, the policy and AI receipts, every file with its SHA-256 and a seal that shows tampering, and verifies a package again later"},"heatmap":{"title":"Heat map and bottlenecks from engine data","gives":"shows the elements of a diagram coloured by how often, how long and how badly they ran on the engine over a period you choose (visits, average and 95th percentile duration, incidents and failure rate) and lists the slowest and most failing elements, each a click from its place on the diagram"},"replay":{"title":"Replay and what-if from this token","gives":"shows the real history of one process instance on the diagram step by step with the variables at each step, and starts a new instance at a chosen element with those variables edited, only on an engine marked for tests or on this machine"},"incidentLoop":{"title":"Incident to fix loop","gives":"runs an incident through its whole loop with every step shown: the reproducing scenario, the proposed fix, a check of the fix with that scenario, redeploying only the changed file and retrying the failed job, as a dry run first and with a confirmation before anything changes on the engine"},"refactorBulk":{"title":"Bulk renames and Extract to Call Activity","gives":"renames many names at once from a mapping file, each with the same preview and the same refusals as a single rename, and moves a subprocess, or a fragment with one way in and one way out, into its own process replaced by a call activity wired through variable mappings; a single rename with its preview stays free, with no time limit"}},"educationWho":"Free Pro for students, teachers and open-source maintainers","educationLine":"{who}: apply at {url}","applyFreePro":"Apply for Free Pro","educationApply":"{who}: apply"},"testRuns":{"cancel":"Cancel","case":"test case {number}","confirmText":"Penstock will deploy a test build to {url}, start instances and answer the jobs it mocks. The build and its instances are removed after each run. Mark the profile with deployment.forTests: true to stop being asked.","confirmTitle":"Run test cases on this engine?","controller":"Penstock scenarios","failed":"The test case failed. See the trace.","mocked":" (mocked)","noCases":"there is no test-case file; penstock test-cases --generate writes one next to the diagram","noneYet":"No run of Penstock test cases has been made in this window yet.","notConfirmed":"Not run: the engine was not confirmed for tests","output":"Penstock Test Runs","pickTitle":"Open the run on the diagram","run":"Run","skipped":"The test case was skipped.","started":"Penstock test cases, {when}","step":"{id}: {state}{mocked}","suite":"{diagram}: {name}","trace":"The trace of this run is at {trace}","traceNotKept":"Penstock could not keep the trace of a run: {reason}","unknownDiagram":"Penstock does not know which diagram that run belongs to","waiting":"waiting for a {kind} at {id}"},"unavailable":{"clipboardPicture":"Putting a picture on the clipboard","converting":"Converting a Camunda 7 diagram","diagramTests":"Running the tests a diagram is linked to","editorPalette":"The IDE palette","linkedRename":"Renaming what a diagram links to","notYet":"{what} is not available in VS Code yet.","projectPageToolWindow":"The tool window the project page sends"},"migration":{"convertQuestion":"Convert {name} to Camunda 8 into {folder}? The original file stays as it is."},"deploy":{"deploymentSection":"the deployment section","tokenAnswered":"The token endpoint answered {status}","tokenAnsweredWith":"The token endpoint answered {status} ({code})","noPassword":"No password for {user} on {where}: enter it under Connection","noClientSecret":"No client secret on {where}: enter it under Connection","noEngineAddress":"No engine address for {where}: set deployment.url"},"host":{"malformed":"The request is malformed","noSuchOperation":"The host has no such operation","notAvailable":"{operation} is not available in this host","unreadable":"{file} could not be read: {reason}","notValidJson":"it is not valid JSON","notValidYaml":"it is not valid YAML ({code}, line {line})"},"tree":{"empty":"No diagrams in this project","unreadable":"The project tree could not read this project: {reason}","open":"Open","reload":"Reload from disk","openConfig":"Open penstock.yaml","moreActions":"More actions…","actionsFor":"Actions for {name}","noFolder":"Open a folder to see its Penstock diagrams, decisions and forms.","openFolder":"Open Folder","cli":{"group":"Run Penstock","runTitle":"Penstock: {command}","diffPrompt":"Commit, branch or tag to compare with:","untrusted":"Running Penstock requires trusting this project first","exportTitle":"Export pictures","exportFolder":"Folder","exportFormat":"Format","exportComment":"SVG needs nothing. PNG needs puppeteer installed in the project.","command":{"check":"Check","scenarios":"Scenarios","junit":"JUnit Tests","code":"Code","docs":"Docs","format":"Format","change":"Diff Since…","export":"Export…","doctor":"Doctor","evidence":"Evidence Pack…"}}},"mcp":{"nodeMissing":"Penstock's MCP server needs Node.js with npm on the PATH. Install Node.js, then reload the window."},"trust":{"accept":"Trust project"},"rename":{"kind":{"bean":"bean name","class":"Java class","decision":"decision id","error":"error code","form":"form id","jobType":"job type","message":"message name","process":"process id","signal":"signal name","topic":"external task topic"},"offerMessage":"The {kind} '{name}' is still used in {summary}. Rename it to '{newName}' there too?","nothingElse":"Nothing else names '{name}'","notRenamable":"This value is not a name a diagram and its code share","action":"Rename","edit":"Rename {kind} '{name}' to '{newName}'","empty":"The new {kind} cannot be empty","scenarioMessage":"Rename its scenario file, {from}, to {to} too?","scenarioFailed":"{from} could not be renamed to {to}, so it still has the old name.","files":{"one":"{count} file","other":"{count} files"},"summary":"{files}, {diagrams} in diagrams and forms, {code} in code"},"whatsNew":{"title":"Penstock updated to {version}","action":"What's new"},"about":{"title":"About","version":"Version","development":"development","documentation":"Documentation","licenses":"Open source licenses","trusted":"Trusted projects","trustedNone":"No project is trusted through Penstock yet.","trustedRemove":"Remove","trustedFailed":"Penstock could not take {path} off its list of trusted projects: {reason}"},"chats":{"title":"Chats","rename":"Rename chat","delete":"Delete chat","renamePrompt":"Chat title","deleteConfirm":"Delete the chat \\"{title}\\"?","deleteDetail":"Its messages are removed from this project.","deleteAction":"Delete","connecting":"starting the agent","empty":"No chats yet. Ask the agent from the input at the foot of an editor, or start one here.","untrusted":"Trust this workspace to let an agent work in it.","outside":"{path} is outside the project.","openFirst":"Open a diagram, decision or form to continue this chat."}},"script":{"cannotBeRenamed":"A Penstock script tab cannot be renamed","context":{"summary":"Context: {names}","title":"Variables at this step","showAll":"Show all"},"writers":{"none":"No place in the process sets it","set":"Set by {places}"},"typeLabel":"Type: {type}","completion":{"variable":"Process variable","builtin":"FEEL built-in function"},"noSuchScript":"There is no script at that place in the diagram.","conflict":{"message":"The diagram changed {name} while you were editing it","keepTab":"Keep my text","useDiagram":"Use the diagram's text"},"run":{"button":"Run","title":"Values for the expression","help":"Each variable takes a JSON value or a FEEL expression. A variable left empty is not set.","kindLabel":"Kind","kind":{"json":"JSON","expression":"FEEL"},"unavailable":"Only a FEEL expression runs here. Groovy and JavaScript scripts run in the engine, as part of the process."}},"themeChoice":{"title":"Editor theme","ide":"Follow the IDE","light":"Light","dark":"Dark","dracula":"Dracula"},"processDebug":{"problem":{"unreadable":"The diagram could not be read, so no debug copy was made.","noProcess":"The diagram has no executable process to debug.","unknownProcess":"The process {process} is not in this diagram.","unreachable":"The engine could not be reached.","notDeployed":"The engine did not report the debug copy {process} after deploying it.","incident":"The engine reported an incident.","timedOut":"The engine did not answer within {seconds} seconds.","unreachableAfter":"The engine did not answer after {attempts} tries: {reason}"},"message":{"stopped":"Debugging stopped.","finished":"The process instance finished.","incident":"The instance has an incident: {reason}","endedElsewhere":"The instance ended outside the debugger."},"cleanup":{"searchFailed":"Could not look for debug instances: {reason}","cancelFailed":"Instance {instance} is still running: {reason}","deleteFailed":"The debug copy {deployment} is still deployed: {reason}"},"breakpointDot":"Breakpoint at {element}. Click to remove it.","confirm":{"title":"Debug on this engine?","text":"Penstock will deploy a copy of the process as {copy} on {url}, start an instance of it, and remove the copy when you stop. The copy runs the real tasks of your process, so workers and delegates on this engine will do real work.","accept":"Debug"},"invalidValue":"The value of {name} should be valid JSON","variables":"Variables","variablesHint":"Change a value to set it before the process goes on. Values are JSON, so text needs quotes.","noVariables":"This step has no variables yet.","variableName":"Name","variableValue":"Value of {name}","variableValueHint":"JSON value","addVariable":"Add variable","breakpoints":"Breakpoints","noBreakpoints":"No breakpoints. Select a step and toggle one to stop there.","removeBreakpoint":"Remove the breakpoint at {element}","remove":"Remove","toggleOnSelection":"Toggle breakpoint on selection","cleanupPending":"Removing the debug copy…","cleanupDone":"The debug copy {copy} was removed from the engine.","cleanupFailed":"The debug copy could not be removed","leftOnTheEngine":"Left on the engine: {deployment}. Penstock tries again the next time this tab opens.","tryAgain":"Try again","checkingTheEngine":"Looking for an engine to debug on.","noEngine":"No engine to debug on.","noEngineHint":"Connect an engine on this machine, or one marked deployment.forTests, to debug a copy of this process.","state":{"idle":"Not running","deploying":"Deploying the copy","running":"Running","paused":"Paused","finished":"Finished","failed":"Failed","stopped":"Stopped"},"starting":"Starting…","start":"Start debugging","startAndStep":"Start and step","continue":"Continue","step":"Step","stop":"Stop","copyNote":"Debugging runs a copy of this process. The original is never touched: the copy is deployed as {copy} and removed when the session ends.","copyIdFallback":"<process id>__debug","emptyTitle":"Debug this process on your engine","emptyHint":"Toggle breakpoints on steps, then start. The process stops before each breakpoint, and you can read and change its variables, continue, or step to the next element.","pausedAtBreakpoint":"Paused at a breakpoint","pausedAtStep":"Paused by a step","deploying":"Deploying the copy and starting an instance of it.","waiting":"Waiting for something outside the debugger: a worker, a timer, a message or a user task.","runningNote":"Running. Steps passed so far: {count}.","process":"Process","startVariables":"Start variables (JSON)","startVariablesHint":"An object, for example {\\"amount\\": 5}. Leave {} to start with none."},"web":{"pageTitle":"Penstock","unknownFailure":"Unknown failure","serverTimeout":"The server did not answer in time.","fileNotFound":"The file was not found.","noDocumentOpen":"No file is open.","deletedOnDisk":"{name} was deleted on disk. Your changes are kept here.","changedOnDisk":"{name} changed on disk while it has unsaved changes.","reloadedFromDisk":"{name} was reloaded from disk.","reloadFailed":"Unable to reload {name}: {reason}","saveFailed":"Unable to save {name}: {reason}","tree":{"project":"Project","newFile":"New file","empty":"No diagrams, decisions or forms in this project.","emptyHint":"Create a file to start, or start Penstock in the project folder.","unsaved":"Unsaved changes","more":"Project actions","refresh":"Refresh","copyFailed":"Unable to copy to the clipboard."},"tabs":{"label":"Open files","close":"Close {name}","unsaved":"{name} has unsaved changes","all":"All open files","menu":"Actions for {name}"},"pane":{"opening":"Opening {name}...","failed":"Unable to open {name}.","loadingEditor":"Loading the editor...","editorFailed":"Unable to load the editor.","editorFailedHint":"Check the connection to the server and try again."},"banner":{"deleted":"{name} was deleted on disk. Save to write it again.","changed":"{name} changed on disk. Your unsaved changes are still here.","saveFailed":"Unable to save: {reason}","reload":"Reload from disk","keep":"Keep my version","closeTab":"Close tab","compare":"Compare"},"connection":{"lost":"The connection to the server is lost. Your unsaved changes stay in this page; save again when the connection returns."},"empty":{"title":"No file is open.","hint":"Choose a diagram, decision or form in the project tree, or create a new one."},"newFile":{"title":"New file","type":"Type","kind":{"bpmn":"BPMN diagram","dmn":"DMN decision","form":"Form"},"content":"Content","empty":"Empty","example":"Example","name":"Name","nameHint":"The extension {extension} is added when it is missing.","folder":"Folder","folderHint":"Relative to the project folder. Leave it empty for the project folder.","create":"Create","nameEmpty":"Enter a name for the file.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > |","folderOutside":"The folder should stay inside the project.","exists":"A file with this name already exists in this folder.","failed":"Unable to create the file: {reason}"},"unsaved":{"title":"Close {name}?","text":"{name} has changes that are not saved.","discard":"Discard changes"},"text":{"label":"Contents of {name}"},"command":{"actions":"Find action","closeAll":"Close all tabs","closeSplit":"Close split view","closeTab":"Close tab","jumpToTab":"Jump to tab","newFile":"New file","nextTab":"Next tab","previousTab":"Previous tab","quickOpen":"Open file","reconnect":"Reconnect to the server","save":"Save","saveAll":"Save all","settings":"Settings","shortcuts":"Keyboard shortcuts","splitView":"Split view","resetLayout":"Reset the panel layout","toggleSidebar":"Show or hide the sidebar","askAgent":"Ask the agent","agents":"AI agents","connections":"Open the connections map","aiAgents":"Show the AI agents of the project","migration":"Migration workspace","policy":"Policy","drift":"Environments and drift"},"conflict":{"diff":"Differences between your version and the file on disk","help":"Keeping your version writes it over the file the next time you save.","keepMine":"Keep my version","legendMine":"Your version","legendTheirs":"On disk","same":"Your version and the file on disk have the same lines.","summary":"Lines only in your version: {mine}. Lines only on disk: {theirs}.","takeTheirs":"Load from disk","title":"{name} changed on disk","tooDifferent":"The two versions differ too much to compare line by line."},"drafts":{"discard":"Discard","found":{"one":"Found unsaved changes from your last session in {count} file.","other":"Found unsaved changes from your last session in {count} files."},"label":"Unsaved changes from the last session","restore":"Restore unsaved changes"},"expired":{"hint":"Your unsaved changes are kept in this browser and come back when you open the project again.","retry":"Try again","text":"The link this page was opened with no longer works. Penstock was probably restarted. Use the link that penstock web printed in the terminal.","title":"This page has lost its link to Penstock"},"main":{"label":"Editor"},"menu":{"close":"Close","closeAll":"Close all","closeOthers":"Close others","closeRight":"Close to the right","copied":"Copied.","copyFailed":"Unable to copy to the clipboard.","copyPath":"Copy path","copyRelative":"Copy relative path","reveal":"Reveal in project tree","splitRight":"Split right","splitDown":"Split down"},"quick":{"commandsLabel":"Commands","files":"Files","hint":"Type to filter. Use the arrow keys to choose and Enter to open. Type > for commands.","label":"Open file","noCommands":"No commands match.","noFiles":"This project has no diagrams, decisions or forms yet.","noMatch":"No files match \\"{query}\\".","openFile":"{path}, open","opened":"open","placeholder":"Search files by name, or type > for commands","recent":"Recently opened","results":"Files","sidePlaceholder":"Choose a file to open beside this one"},"settings":{"appearance":"Appearance","autosave":"Save changes automatically","autosaveDelay":"Delay (seconds)","autosaveHelp":"A file is written after this many seconds without edits. A file that changed on disk is never overwritten.","autosaveRange":"The delay should be a whole number of seconds between {min} and {max}.","saving":"Saving","themeSystem":"Follow the system","title":"Settings","agents":"AI agents","agentsHelp":"Turn the AI chat on or off, choose how conversations open and set up the agents.","agentsManage":"Manage AI agents…","suggestNextBlock":"Suggest the next element","suggestNextBlockHelp":"Shows the element that most likely comes next beside a dead end. Tab adds it, Escape dismisses it.","suggestions":"Suggest names, sources and expressions","suggestionsHelp":"Shows the name, source or expression most likely for a field of the properties panel as faint text after the caret. Tab adds it, Escape dismisses it, Alt+Shift+E explains it.","editor":"Editor"},"shortcuts":{"editorHint":"Press ? inside an editor for its own shortcuts.","group":{"files":"Files","tabs":"Tabs","window":"Window"},"open":"Keyboard shortcuts","title":"Keyboard shortcuts"},"skip":"Skip to the editor","split":{"closePane":"Close the pane of {name}","resize":"Resize the split view"},"state":{"conflict":"Changed on disk","deleted":"Deleted on disk","failed":"Unable to save","saved":"All changes saved","saving":"Saving...","unsaved":"Unsaved changes","unsavedAuto":"Unsaved changes, autosave after {seconds} s without edits"},"status":{"connected":"Connected","encoding":"Encoding and line endings","engine":"Engine","expired":"Link expired","label":"Status","licence":"Licence","offline":"Offline"},"title":{"document":"{name} - {project} - Penstock","project":"{project} - Penstock"},"welcome":{"title":"Open a project","text":"Choose the folder that holds your diagrams, decisions and forms. Nothing leaves this machine.","open":"Open a project...","recent":"Recent projects","noRecent":"No projects opened yet.","recentFailed":"Unable to load the recent projects.","missing":"{folder} is no longer there.","notFound":"Folder not found","forget":"Remove {name} from the list","hint":"You can also start Penstock with a folder: penstock web <folder>."},"folders":{"title":"Open a project","open":"Open project","willOpen":"Opens {folder}","places":"Places","home":"Home","computer":"Computer","recent":"Recent","path":"Folder","location":"Location","list":"Folders","showHidden":"Show hidden folders","showHiddenCount":"Show hidden folders ({count})","hereConfig":"Project here: this folder has a penstock.yaml","hereDiagrams":"Project here: {count} diagrams, decisions or forms in this folder","noFolders":"No folders here.","truncated":"Showing the first {shown} of {total} folders. Type a path to go further.","link":"{name} is a link to another folder","linkTag":"link","projectTag":"project"},"project":{"switcher":"Projects","recent":"Recent projects","openAnother":"Open another project...","close":"Close project","gone":"The folder of {name} is no longer there. Your unsaved changes stay in this page.","downloadZip":"Download project as .zip","unsavedOpenTitle":"Open another project?","unsavedCloseTitle":"Close the project?","unsavedText":"{count} open files have changes that are not saved. The tabs of this project are closed when the project changes.","saveAll":"Save all","saveAllFailed":"Unable to save every file. Nothing was closed.","awayTitle":"The project changed in another tab","awayText":"This page still shows the previous project. Reload it to continue with the project that is open now."},"entry":{"newFolder":"New folder","newFolderTitle":"New folder","createFolder":"Create folder","name":"Name","inside":"Created inside {folder}.","insideProject":"Created in the project folder.","nameEmpty":"Enter a name.","nameCharacters":"The name should not contain / \\\\ : * ? \\" < > | or control characters.","nameEnds":"The name should not start with a space or end with a space or a dot.","rename":"Rename","renameLabel":"New name","duplicate":"Duplicate","moveAction":"Move to...","moveTitle":"Move {name}","moveTo":"Move to","move":"Move","moveFailed":"Unable to move {name}: {reason}","projectFolder":"(project folder)","noFolders":"There is no other folder to move this to.","delete":"Delete","deleteFile":"Delete file","deleteFolder":"Delete folder","deleteFileTitle":"Delete {name}?","deleteFolderTitle":"Delete folder {name}?","deleteFileText":"{name} is removed from the disk. This cannot be undone.","deleteFolderText":"The folder {name} and the {count} files in it are removed from the disk. This cannot be undone.","deleteUnsaved":"{count} of them are open with unsaved changes, and those changes are lost.","copyPath":"Copy path","copyRelative":"Copy relative path","copied":"Path copied.","download":"Download","downloadActive":"Download the open file","renameTitle":"Rename {name}"},"upload":{"title":"Add files to the project","text":"Choose where the files are saved in the project. They are copied there; the originals stay where they are.","button":"Upload file...","drop":"Drop BPMN, DMN or form files to add them to the project","extension":"The name should end with .bpmn, .dmn or .form.","ignored":"Only .bpmn, .dmn and .form files can be added. Other files were skipped.","addOne":"Add file","addMany":"Add {count} files","fileN":"File {number}"},"titleBar":{"label":"Window title"},"dock":{"resize":"Resize the panels"},"code":{"noServer":"Highlighting only. Install {server} to get completion, hover and go to definition here.","uses":{"title":"Used in diagrams","open":"Open {name} in {diagram}","item":"{type} in {diagram}","more":"and {count} more","kind":{"JOB_TYPE":"Job type","TOPIC":"Topic","CLASS":"Class","BEAN":"Bean","MESSAGE":"Message"}},"names":{"code":"in code","diagram":"in a diagram","both":"in code and diagrams"}},"toolPanel":{"label":"Penstock project model","toolbar":"Penstock actions","filter":"Filter the model","refresh":"Refresh","open":"Open","menu":"Penstock node actions","loading":"Reading the project model...","error":"Unable to read the project model.","empty":"Nothing to show yet.","emptyHint":"Open a folder with BPMN, DMN or form files, or start from an example.","noMatch":"Nothing matches the filter.","locked":"Links to code are part of Pro.","unlock":"Unlock","truncated":"The tree shows the first {count} nodes. Narrow it with the filter.","refreshFailed":"Unable to refresh the model: {reason}","stale":"The model changed while you chose. Choose the action again.","unsupported":"The browser editor cannot do this yet.","copied":"Copied to the clipboard."},"sidebar":{"label":"Sidebar","actions":"Actions","check":"Check","scenarios":"Scenarios","monitor":"Monitor","debug":"Debug","layout":"Auto layout","unavailable":"Not available for the open file.","resize":"Resize the sidebar","resizeChats":"Resize the chat list","toggle":"Show or hide the sidebar","countScenarios":"{passed} of {all} scenarios passed","countProblems":{"one":"{count} problem","other":"{count} problems"},"countWaiting":{"one":"{count} waiting","other":"{count} waiting"}},"script":{"noDiagram":"The diagram of this script is not open in the editor."}},"webHost":{"testsNeedTheIde":"Running the tests of a worker needs the IDE. Run them from your build tool.","source":{"readOnly":"Read-only","truncated":"The file is large, so only the first part is shown.","label":"Source of {name}"},"compare":{"failed":"The two versions could not be compared","failedHint":"One of them is not a diagram Penstock can read.","against":"Compared with {version}","summary":"{added} added, {removed} removed, {changed} changed, {moved} moved","identical":"No differences","action":"Compare with the last commit","notTracked":"This file is not in a git repository yet, so there is nothing to compare it with.","head":"the last commit","tab":"{name} (changes)"},"places":{"open":"Open","hint":"Several places match. Pick the one to open.","none":"{name} is not written in any source file of this project."},"rename":{"title":"Rename in linked files","intro":"{from} is now {to}. The old name is still written in:","apply":"Rename","offer":"{from} is still written elsewhere. {summary}","review":"Review","done":"Renamed {from} to {to}. Places: {places}, files: {files}.","failed":"Nothing was renamed: {reason}","where":{"diagram":"Diagram","form":"Form","code":"Code"}},"migration":{"title":"Convert {name} for Camunda {target}","convert":"Convert","folder":"Folder","folderHint":"The converted files go here, inside the project.","folderOutside":"The folder should be inside the project","replace":"Existing files","replaceHint":"Already there: {files}","replaceBox":"Replace the files that are already there","changes":"What changes","noChanges":"Nothing in the file itself changes.","open":"What stays open","nothingOpen":"Nothing stays open.","byHand":"By hand","summary":"Changes: {changes}, left open: {open}, by hand: {manual}"},"licence":{"title":"Penstock licence","plan":"Plan: {tier}. {detail}","loading":"Reading the licence…","trial":"Pro trial, {days} days left.","needed":"This needs Penstock Pro. Enter a key or buy one.","key":"Licence key","keyHint":"The key from your purchase. It is kept on this machine, never in the page.","keyEmpty":"Enter the licence key first","email":"E-mail","emailHint":"Filled in on the payment page when you buy.","activate":"Activate","buyPro":"Buy Pro","buyTeam":"Buy Team","release":"Release this machine","activated":"Penstock {tier} is active on this machine.","released":"The licence was released from this machine.","checkoutOpened":"The payment page is open in a new tab. The key arrives by e-mail once you have paid.","tier":{"free":"Free","pro":"Pro","team":"Team"}},"clipboard":{"copyTitle":"Copy by hand","copyText":"The browser did not let the page copy. Copy the text below yourself.","copy":"Copy","pasteTitle":"Paste by hand","pasteText":"The browser did not let the page read the clipboard. Paste the text below."}},"desktop":{"name":"Penstock","about":{"description":"BPMN, DMN and form editor for Camunda"},"menu":{"file":"File","newFile":"New file","newWindow":"New window","openProject":"Open project...","openRecent":"Open recent","noRecent":"No recent projects","clearRecent":"Clear recent projects","closeProject":"Close project","save":"Save","closeTab":"Close tab","undo":"Undo","redo":"Redo","cut":"Cut","copy":"Copy","paste":"Paste","selectAll":"Select all elements","closeWindow":"Close window","revealMac":"Reveal in Finder","revealWindows":"Show in Explorer","revealLinux":"Show in file manager","edit":"Edit","view":"View","toggleTree":"Toggle project tree","toggleSidebar":"Toggle sidebar","zoomIn":"Zoom in","zoomOut":"Zoom out","zoomReset":"Actual size","window":"Window","help":"Help","shortcuts":"Keyboard shortcuts","website":"Penstock website","about":"About {name}"},"shell":{"starting":"Opening {project}...","welcome":{"title":"Open a project","hint":"Choose a folder with BPMN diagrams, DMN decisions and forms.","open":"Open project...","recent":"Recent projects","noRecent":"Projects you open appear here."},"failed":{"title":"Unable to start the editor","hint":"The editor engine did not start for {project}."},"stopped":{"title":"The editor engine stopped","hint":"Your unsaved changes are still in the window. Restart the engine to continue."},"crashed":{"title":"The editor window stopped","hint":"Reload the window to continue."},"restart":"Restart","reload":"Reload","another":"Open another project...","details":"Details"},"dialog":{"openProject":{"title":"Open project","button":"Open"},"unsaved":{"title":"Close without saving?","text":"This window has unsaved changes. They will be lost if you close it.","discard":"Discard changes","cancel":"Cancel"},"quit":{"title":"Quit without saving?","text":"Some windows have unsaved changes. They will be lost if you quit."}}},"agent":{"notFound":"The agent command was not found or could not be started.","unsafe":"The agent was not started: a Windows command file cannot be given these arguments safely.","exited":"The agent stopped unexpectedly.","installFailed":"The agent service could not be installed. Check your network or npm registry and try again.","npmMissing":"Penstock needs Node.js with npm to start the agent service.","unpublished":"npm has no Penstock command line for this version, so the agent service could not start.","serviceExited":"The agent service stopped before it was ready.","serviceNotStarted":"The agent service could not be started.","exitCode":"exit code {code}","authRequired":"The agent requires authentication. Log in or configure credentials first.","failed":"The agent reported an error: {detail}","timeout":"The agent did not answer in time.","write":"Write {path}","allow":"Allow","reject":"Reject","writeRejected":"Writing {path} was not allowed.","newChat":"New chat","modeName":"Mode","stepOf":"step {step} of {total}","waitingForYou":"waiting for you","retiring":"The agent is finishing in an older window; try again in a moment.","updateNeeded":"The agent server is newer than this window. Update the plugin or the extension, then try again.","hubLost":"The agent server stopped. Try again in a moment.","serverGone":"The agent stopped because its agent server closed during the turn.","stopped":"The turn was stopped.","unanswered":"Nobody answered the question, so the turn was stopped.","quiet":"The agent said nothing while no window was open, so the turn was stopped.","killed":"The agent did not stop in time, so it was restarted and this turn was stopped.","newSession":"The agent does not keep this chat's earlier messages, so it continues in a new session.","contextFile":"The message is about the file {file}.","contextElements":"Selected elements: {elements}.","contextLinks":"When you mention an element of a Penstock diagram, write it as a markdown link, [Name](penstock:<file>#<id>), with the file path relative to the project and the element's id, for example [Charge card](penstock:docs/order-process.bpmn#charge_card). A file is [name](penstock:<file>). Never put the id or the path in the visible text. Before you name a variable, a job type or a mapping, call the tool element_context of the penstock server for the element: it lists the variables that reach it and the names the project already uses, so reuse one of them instead of inventing a new one.","reason":{"unknownAgent":"There is no agent called {agent}.","noSuchChat":"There is no such chat.","noSuchQueued":"That message is no longer queued.","noSuchOption":"The agent does not offer that setting.","badOptionValue":"The agent does not offer that choice for this setting.","optionRefused":"The agent did not accept the change: {reason}","noSignIn":"The agent offers no sign-in to start from here.","signInRefused":"The agent did not sign in: {reason}","off":"The AI chat is turned off in the settings.","staleQuestion":"The agent is not waiting for that question any more.","badOption":"{option} is not one of the answers the agent offered.","badText":"The message should not be empty or longer than {limit} characters.","badTitle":"The title should not be empty or longer than {limit} characters.","queueFull":"No more than {limit} messages should wait in the queue.","notRunning":"The agent is not running.","noSuchFile":"There is no such file.","fileTooLarge":"The file should be smaller than {limit} MB.","isAFolder":"That is a folder, not a file.","noClient":"The client should be named."},"log":{"skipped":"Penstock skipped the chat file {file}: {reason}","notKept":"Penstock could not keep the chat {id}: {reason}"}},"patch":{"eventNotAllowed":"a {type} cannot have a {event} event definition","sameElement":"a sequence flow cannot start and end at \\"{id}\\"","startEventTarget":"nothing can lead into the start event \\"{id}\\"","boundaryTarget":"nothing can lead into the boundary event \\"{id}\\"","differentScopes":"\\"{from}\\" and \\"{to}\\" are not in the same process or sub-process","eventBasedTarget":"an event-based gateway can only lead to a catch event or a receive task, not \\"{to}\\"","duplicateFlow":"there is already a sequence flow from \\"{from}\\" to \\"{to}\\"","notAFlowNode":"\\"{id}\\" is a {type}, which a sequence flow cannot start or end at","cannotRemoveContainer":"\\"{id}\\" is a {type}; remove it in the editor","isAFlow":"\\"{id}\\" is a sequence flow; move the elements it joins","dependsOnFailed":"needs operation {number}, which cannot be applied","noDrawing":"the diagram has no drawing to place elements in"},"ghost":{"chip":{"add":"Add","connect":"Connect","remove":"Delete","rename":"Rename","move":"Move","condition":"Condition","reference":"Reference","worker":"Worker","change":"Change"},"item":{"add":"Add {type} “{name}”","connect":"Connect “{from}” to “{to}”","remove":"Delete {type} “{name}”","move":"Move {type} “{name}”","rename":"Rename {type} “{name}” to “{value}”","condition":"Set the condition of {type} “{name}” to {value}","setOne":"Set {key} of {type} “{name}” to {value}","setMany":"Change {keys} of {type} “{name}”"},"check":{"passed":"Checks passed"},"status":{"ok":"Passed","warning":"Warning","error":"Error","blocked":"Cannot be applied"},"checking":"Checking the proposed changes…","proposed":"{count} proposed changes to review","position":"{label}: {position} of {count}","accepted":"Accepted: {label}. {left} left to review.","rejected":"Rejected: {label}. {left} left to review.","allRejected":"Rejected {count} changes.","allAccepted":"Accepted {count} changes as one step. {left} left to review.","cannotAccept":"Cannot accept “{label}”: {reason}","alreadyRejected":"a change it needs was rejected","nothingToAccept":"There is nothing left that can be accepted.","noLongerApplies":"“{label}” no longer applies to the diagram: {reason}","reviewed":"Review finished: {accepted} accepted, {rejected} rejected.","commentSent":"Comment sent about “{label}”","region":"Review of proposed changes","title":"Proposed changes","summary":"{pending} of {total} to review","attention":"{count} need attention","queued":"{count} more proposals waiting","acceptAll":"Accept all","rejectAll":"Reject all","accept":"Accept","reject":"Reject","next":"Next change (J)","previous":"Previous change (K)","showAll":"Show all changes","hideAll":"Hide the list","comment":"Comment for the agent","sendComment":"Send comment","close":"Close the review","decided":{"accepted":"Accepted","rejected":"Rejected"},"patchFindings":"Not tied to one change","empty":"No proposed changes.","emptyHint":"When an agent proposes changes, they appear on the canvas as ghosts for you to accept or reject.","checkpoint":{"heading":"What undo does not cover","kept":"A checkpoint of the diagram is kept before each accepted step.","limit":{"comments":"Comments you sent to the agent stay sent; undo does not recall them.","otherFiles":"Only this diagram is covered: forms, decision tables and code the agent changed are not.","deployed":"A deployment made after accepting is not withdrawn.","memory":"The checkpoint lives in memory and is gone when the editor is closed or reloaded."}},"collapse":"Collapse the review","expand":"Expand the review","undone":"Back for review: {label}","acceptChange":"Accept change","rejectChange":"Reject change","wholeHint":"The agent writes the whole file, so the change is accepted or rejected as one.","wholeAccepted":"Change accepted.","wholeRejected":"Change rejected."},"suggestions":{"status":{"offered":"Suggested {value}. Tab adds it, Escape dismisses it, Alt+Shift+E explains it.","added":"Added {value}.","dismissed":"Suggestion dismissed."},"explain":{"title":"Why this suggestion","likelihood":"Likelihood {percent}%","keys":"Tab adds it, Escape dismisses it"},"unit":{"ratio":"ratio","percent":"percent","basisPoint":"basis point","second":"second","millisecond":"millisecond","minute":"minute","hour":"hour","byte":"byte","kilobyte":"kilobyte","megabyte":"megabyte","gigabyte":"gigabyte","dollar":"dollar","cent":"cent"},"origin":{"fact":"A fact of the code","pool":"Found in the project","composed":"Composed from the names of the diagram","transform":"An expression, checked on the sample values"},"reason":{"other":"A signal from the diagram and the project","kindConvert":"Converts {from} to {to}, a factor of {factor}.","kindWholeMinorUnits":"Rounds the result to whole {to}.","kindIsoDuration":"Writes the duration as an ISO-8601 length.","kindDurationText":"Writes the duration as its ISO-8601 text.","kindNumberFromText":"Reads the text as a number.","kindTextFromValue":"Writes the value as text.","kindDurationFromText":"Reads the text as a duration.","constantInDiagram":"The diagram already uses {text}.","constantInProject":"Another diagram of the project uses {text}.","weightedOverlap":"shares its words with the name","headEqual":"the same head word","tailEqual":"the same last word","jaroWinkler":"spelled alike","trigramCosine":"letters in common","lengthRatio":"a similar length","casingAgrees":"the same casing","ownerStripped":"an element prefix removed","typeKnown":"a known type","originContract":"written by the worker's code","originScript":"written by the script","originDecision":"an output of a called decision","originDownstream":"read by a later element","originScope":"in scope here","originTaskType":"written for the same task type elsewhere","labelAssociation":"its words go with the label's"}},"nextBlock":{"chip":"Next: {type} · Tab to add","status":{"suggested":"Suggested next: {type}. Press Tab to add it, Escape to dismiss.","added":"Added {type}.","dismissed":"Suggestion dismissed."}},"aiBlocks":{"selectElement":"Select {type} {name} on the canvas","openScenario":"Open scenario {name} in the Scenarios tab","diffSummary":"{added} added, {removed} deleted, {changed} changed"},"timeline":{"title":"Timeline","region":"Timeline of a run","play":"Play","previousStep":"Previous step","nextStep":"Next step","toStart":"To the start","toEnd":"To the end","speed":"Playback speed {speed}","channel":"Colour bars by","channelStatus":"Status","channelDuration":"Duration","channelCoverage":"Coverage","source":"Show the run of","sourceInstance":"Instance","sourceScenario":"Scenario run","refresh":"Refresh","close":"Close the timeline","zoomIn":"Zoom in","zoomOut":"Zoom out","fit":"Fit to width","resize":"Resize the timeline","playhead":"Playhead","step":"Step {step} of {total}","stepAt":"Step {step} of {total}: {name}","beforeStart":"Before the first step","lane":"{name}, visits: {count}","bar":"{name}, visit {visit}, {state}, {duration}","merged":"{count} short steps","folded":"{span} folded","stateCompleted":"Completed","stateActive":"Active","stateFailed":"Failed","stateTerminated":"Terminated","emptyTitle":"No run to show.","emptyHint":"Pick an instance in Monitor, or run a scenario, and its steps appear here.","loadingTitle":"Reading the run…","loadingHint":"Asking the engine for the steps of this instance.","noStepsTitle":"This run has no steps yet.","noStepsHint":"The engine has not recorded a step for it. Refresh in a moment.","problem":"Unable to read the run: {reason}","detailStarted":"Started","detailEnded":"Ended","detailDuration":"Duration","detailInstance":"Activity instance","detailVisit":"Visit","detailIncident":"Incident","detailChanged":"Changed variables","detailMocked":"Answered by the scenario","detailNone":"Select a bar to see its step.","coverageSummary":"{covered} of {total} elements reached","unvisited":"Not reached","runLabel":"Run {id}","keysHint":"Left and Right step, Shift with them walks the visits of a row, Shift with Up and Down changes the row, Space plays, Home and End jump, Enter selects the element, plus, minus and zero zoom"},"codeBridge":{"ambiguousDetail":"More than one place in the code answers to {name}.","badgeAmbiguous":"{element}: {count} places in the code match {name}","badgeBound":"{element}: code found in {where}","badgeMissing":"{element}: no code found for {name}","cardLabel":"Code of {element}","createStub":"Create worker stub","groupTitle":"Code","kindBean":"Bean","kindClass":"Class","kindDecision":"Decision","kindJobType":"Job type","kindMessage":"Message","kindProcess":"Process","kindTopic":"Topic","missingDetail":"Nothing in the project's code is named {name}.","missingNear":"The closest name in the code is {near}.","moreCount":"and {count} more","notReached":"No test run has reached it","openCode":"Open code","openDecision":"Open decision","openPlace":"Open {where}","openProcess":"Open process","paused":"The debugger is paused here","reached":"Reached by a test run","snippetLoading":"Reading the code…","snippetUnavailable":"The first lines are not available here.","stateAmbiguous":"Several places match","stateBound":"Code found","stateMissing":"No code found","tests":"Tests: {count}"},"assistant":{"showDetails":"Show details","card":{"close":"Close","connecting":"Starting the agent...","expand":"Open the chat in the sidebar","fold":"Fold the chat","label":"Latest turn of the chat","loading":"Loading the conversation...","unfold":"Unfold the chat","suggest":"Expand the chat","suggestLong":"The conversation is getting long.","suggestDocument":"The answer contains a file.","newChat":"New chat"},"change":{"changed":"{name}: {what}","created":"New file {name}","file":"{name} changes","flow":"Flow {from} → {to}","lines":"{name}: +{added} -{removed} lines","moved":"{name} moves"},"chats":{"empty":"No chats yet. Start one with +.","label":"Chats","menu":"Chat actions","new":"New chat","title":"Chats","agents":"AI agents"},"delete":{"accept":"Delete chat","action":"Delete","text":"\\"{title}\\" and its messages will be removed from this project.","title":"Delete chat"},"ended":{"text":"The agent ended without an answer.","title":"The agent has ended"},"form":{"title":"Agent settings","agent":"Agent","agentNew":"Changing the agent starts a new chat.","manage":"Manage agents…","back":"Back"},"input":{"noAgent":"No agent","add":"Attach a file or mention an element","ask":"Ask the agent","settingsLabel":"{agent}: {settings}","optionNextTurn":"Applies from the next message.","context":"Context of the message","keyEnter":"Enter","keyShiftEnter":"Shift Enter","keyNewline":"newline","keyQueue":"queue","keySend":"send","label":"Message to the agent","more":"+{count} more","placeholder":"Ask about this or give the agent a task","queued":"Queued messages","queuedText":"Queued: {text}","removeChip":"Remove {name} from the message","send":"Send","stop":"Stop","unqueue":"Take the message back","stateWorking":"Agent working…","stateWaiting":"Waiting for you","showCard":"Show the conversation"},"mention":{"elements":"Elements","files":"Files","label":"Attach to the message","none":"Nothing matches.","search":"Search elements and files"},"noAgent":{"choose":"Choose another agent","settings":"Agent settings","text":"No agent is installed on this machine. Install one with:","title":"No agent found"},"question":{"allow":"Allow","allowAlways":"Always allow","clean":"Check is clean","deny":"Deny","denyAlways":"Always deny","details":"Show the changes in full","label":"The agent asks for permission","showOnCanvas":"Show on canvas","undo":"Undo takes it back","apply":{"one":"Apply {count} change to {file}?","other":"Apply {count} changes to {file}?"},"files":{"one":"{count} file","other":"{count} files"},"problems":{"one":"{count} problem to look at","other":"{count} problems to look at"}},"rename":"Rename","signIn":"Sign in","signedOut":{"text":"Sign in to the agent in its own app, then try again.","title":"{agent} is not signed in"},"state":{"connecting":"starting","failed":"stopped with an error","idle":"idle","waiting":"waiting for you","working":"working"},"switch":{"label":"Switch chat","list":"Chats of this project"},"tryAgain":"Try again","unreachable":"Unable to reach the agent service","changeLabel":"Changes to {name}","diffTooLarge":"The change is too large to show here.","hideXml":"Hide XML","showXml":"Show XML","noVisibleChange":"Nothing changes in the drawing; only the text of the file does.","reviewOnCanvas":"The change is also shown on the canvas of {name} while that diagram is open.","thinking":"Thinking","newChat":"New chat","openFile":"Open {path}","openAtLine":"Open {path} at line {line}","truncated":"The rest of this message is not shown.","tool":{"pending":"Waiting","running":"Running","done":"Done","failed":"Failed","stopped":"Stopped","penstock":{"listDiagrams":"List diagrams","showDiagram":"Show diagram","editDiagram":"Edit diagram","checkDiagram":"Check diagram","analyzeFlow":"Analyze flow","listScenarios":"List scenarios","checkCodeLinks":"Check code links"}},"loose":{"element":"Not shown as ghosts (element type not supported): {ids}","attach":"Not shown as ghosts (not connected to an element that already exists): {ids}","scope":"Not shown as ghosts (inside another container than the element before it): {ids}","type":"Not shown as ghosts (the element type changes): {ids}","reconnect":"Not shown as ghosts (a flow is reconnected): {ids}","resize":"Not shown as ghosts (an element is resized): {ids}","property":"Not shown as ghosts (a property that cannot be set or cleared this way): {ids}","event":"Not shown as ghosts (the event definition changes): {ids}"},"sentence":{"listing":"Listing the diagrams","listed":{"one":"Listed {count} diagram","other":"Listed {count} diagrams"},"listedPlain":"Listed the diagrams","reading":"Reading {file}","read":"Read {file}","checking":"Checking {file}","checked":{"one":"Checked {file} - {count} problem","other":"Checked {file} - {count} problems"},"checkedClean":"Checked {file} - no problems","checkedPlain":"Checked {file}","analysing":"Analysing the flow of {file}","analysed":{"one":"Analysed the flow - {count} problem","other":"Analysed the flow - {count} problems"},"analysedDeadEnds":{"one":"Analysed the flow - {count} dead end","other":"Analysed the flow - {count} dead ends"},"analysedClean":"Analysed the flow - no problems","analysedPlain":"Analysed the flow of {file}","scenariosListing":"Listing the scenarios of {file}","scenariosListed":{"one":"Listed {count} scenario","other":"Listed {count} scenarios"},"scenariosRan":{"one":"Ran {count} scenario - {passed} passed","other":"Ran {count} scenarios - {passed} passed"},"scenariosPlain":"Listed the scenarios of {file}","codeChecking":"Checking the code links","codeChecked":{"one":"Checked the code links - {count} problem","other":"Checked the code links - {count} problems"},"codeClean":"Checked the code links - no problems","codePlain":"Checked the code links","editing":"Editing {file}","edited":"Edited {file}","previewing":"Previewing an edit of {file}","previewed":"Previewed an edit of {file}","unfinished":"{step} - unable to finish","more":"+{count}"},"work":{"steps":{"one":"{count} step","other":"{count} steps"},"label":"What the agent did"},"view":{"label":"View of the change","picture":"Picture","source":"Source","openDiff":"Open diff","diffTitle":"Changes to {name}","sourceLabel":"Source of the change","folded":{"one":"{count} unchanged line","other":"{count} unchanged lines"},"showSource":"Show source","applied":{"one":"Changed {count} element","other":"Changed {count} elements"},"appliedFile":"Changed {file}"},"picker":{"list":"Agents","missing":"Not installed","manage":"Manage agents…","newChat":"Choosing another agent starts a new chat."},"chip":{"noElement":"No element called {id} in {file}","noFile":"No file called {file} in this project"},"tab":{"emptyChat":"This chat has no messages yet.","emptyChatHint":"Write below to ask the agent about this editor's file.","label":"Chat","transcript":"Conversation","empty":"Ask the agent about this project.","emptyHint":"Changes it wants to make are shown here for your approval.","unreadable":"Unable to load this chat.","unreadableHint":"The agent may have been stopped. Try again in a moment."},"working":"Working..."},"agents":{"title":"AI agents","customDescription":"Your own command: {command}","general":"General","aiChat":"AI chat","search":"Search agents","list":"Agents","on":"On","all":"All agents","allShown":"Every agent is on.","noneOn":"No agent is on. Install one and turn it on.","noMatch":"No agent matches the search.","loading":"Loading the agents…","failed":{"title":"The agents are not available","hint":"Penstock could not read the list of agents. Check that the editor is connected and try again."},"state":{"installing":"Installing…","installingPercent":"Installing {percent}%","reading":"Reading models…","failed":"Unable to install","update":"Update available","on":"On","installed":"Installed"},"version":"Version {version}","license":"License","website":"Website","repository":"Source code","status":"Status","via":{"path":"Found on your PATH","download":"Installed by Penstock","package":"Prepared by Penstock","custom":"Your own command"},"how":{"binary":"Not installed. Penstock downloads it for this computer and checks the download against the checksum of the registry.","npx":"Not installed. It runs through npx, which fetches it the first time you use it.","uvx":"Not installed. It runs through uvx, which fetches it the first time you use it.","custom":"Your own command"},"cannotInstall":"Not installed. Penstock cannot install it on this computer.","install":"Install","tryAgain":"Try again","update":"Update","turnOn":"Turn on","turnOff":"Turn off","uninstall":"Uninstall","byHand":"To install it yourself, run","models":"Models and options","modelsRefresh":"Refresh models","modelsReading":"Asking the agent…","modelsEmpty":"No models read yet.","modelsEmptyHint":"Refresh models starts the agent, asks which models it offers and closes it again. The agent has to be signed in.","modelsOwn":"The agent’s own choice ({value})","modelsRead":"Read {time}","signInHint":"Sign in with the agent’s own tool, for example by running it once in a terminal, then refresh again.","updating":"Updating the list…","neverUpdated":"The list has not been updated yet.","updatedSnapshot":"The list that came with Penstock, {time}","updated":"List updated {time}","refresh":"Refresh the list","blocked":{"node":"Needs Node.js, which is not on this computer.","nodeLink":"Get Node.js","uv":"Needs uv, which is not on this computer.","uvLink":"Get uv","platform":"There is no download for this computer.","checksum":"The registry gives no checksum for this download, so Penstock does not install it. Install it yourself and Penstock finds it on the PATH."},"reason":{"tooLarge":"The answer was larger than it should be.","timeout":"The server did not answer in time.","offline":"Unable to reach the server.","http":"The server answered with an error:","badList":"The answer was not a list of agents.","notKept":"Penstock could not keep the list on this computer:","archiveTooLarge":"The download unpacks to more than it should.","badArchive":"The download is not a valid archive.","unsafeArchive":"The download has a file outside its folder, so Penstock stopped:","noTar":"Penstock needs the tar program to unpack this download, and it is not available:","cancelled":"Cancelled.","noNode":"Node.js is not on this computer.","npmFailed":"npm was unable to fetch the package:","checksum":"The download does not match the checksum of the registry, so Penstock threw it away.","noProgram":"The download does not contain the program:","notInstallable":"Penstock does not install this agent.","busy":"An install is still running.","notInstalled":"Install the agent before turning it on.","noOptions":"The agent did not offer any models or options.","noHostPage":"This host has no page for the AI agents.","installFailed":"Unable to install the agent:","unknown":"Something went wrong."},"aiChatOff":"Off","aiChatBottom":"At the bottom of the editor","aiChatSidebar":"In the sidebar","aiChatOffHelp":"No input, no chats and no agent process: the agent is not started.","aiChatBottomHelp":"The input sits at the foot of the editor, with the conversation card above it.","aiChatSidebarHelp":"The conversation lives in the Chat tab of the sidebar, and no input sits at the foot.","scope":{"tools":"tool","resources":"resource","prompts":"prompt"},"finding":{"noModelCallLimit":"{agent} has no limit on model calls, so a loop that never settles keeps calling the model.","toolWithoutDescription":"Tool {tool} of {agent} has no description for the model.","fromaiIncomplete":{"description":"fromAi({parameter}) in {tool} has no description.","type":"fromAi({parameter}) in {tool} has no type.","both":"fromAi({parameter}) in {tool} has neither a description nor a type."},"filter":{"empty":"The filter of {client} lets no {scope} through: its included list is empty.","allExcluded":"The filter of {client} lets no {scope} through: every included name is also excluded."},"duplicateTool":"Tool {name} of {agent} has the same name as {other}, apart from capitals.","duplicateClient":"{agent} uses the MCP client {name} twice ({other} and this element), so the model gets its tools twice.","adhocWithoutAgent":"{name} looks like the tool container of an agent, but no AI agent uses it.","mcpClientNoConfig":"MCP client {client} of {agent} is defined in no configuration of the project.","plainTextSecret":"{field} of {agent} holds a value written into the diagram; use a secret instead.","deprecatedTemplate":"{agent} uses version {version} of the Camunda 8.9 agent template, which 8.10 deprecates; use {replacement}."},"migrate":{"refusal":{"tooOld":"Version {version} of the template is older than version {min}, where the migration starts. Update the element to the latest 8.9 version of the template in the Modeler first.","tooNew":"Version {version} of the template is newer than version {max}, the newest one the migration rules cover.","noVersion":"The element carries no template version.","duplicateInput":"An input of the element is mapped twice.","dynamicValue":"{property} holds an expression, so Penstock cannot tell which settings of the 8.10 template apply.","unmappedValue":"{path} is {value}, which the migration rules of the template do not map.","unmappedExpression":"{path} is an expression, which the migration rules of the template cannot map.","mustChoose":"{target} has to be chosen in the 8.10 template and has no default.","unknownInput":"{target} has no place in the 8.10 template, and no migration rule moves it.","inactiveInput":"{target} is set, but the 8.10 template does not show it for the settings the agent has after the migration.","badChoice":"{target} is {value}, which the 8.10 template does not offer.","noZeebe":"The file does not declare the Zeebe namespace.","noElement":"The element could not be found in the file as a single element with its own extension elements.","noInputs":"The input mapping of the element could not be found in the file.","noTaskDefinition":"The task definition of the element could not be found in the file.","wrongType":"The element is a {type}, not the element type of the template.","unreadable":"The rewritten file could not be read back.","readBack":"The rewritten element does not read back as planned.","otherChanged":"Another element of the file would have changed.","unknownCondition":"The migration rules of the 8.10 template use a condition that Penstock does not know: {what}.","noTarget":"A migration rule of the 8.10 template names no target.","noAction":"A migration rule for {target} neither moves nor sets a value.","noMigration":"The 8.10 template names no migration from this one."}},"scenario":{"stubAnswer":"Stubbed model answer from Penstock.","noteTaskStub":"The model is stubbed: the agent job is completed with a canned answer and no tool call, so the scenario checks the path around the agent, not the model. A tool call needs a job worker that answers differently on each run, which one mock cannot do.","noteSubprocessRunner":"This agent is an ad-hoc sub-process. The scenario uses COMPLETE_JOB_AD_HOC_SUB_PROCESS, which Camunda Process Test runs and the Penstock runner does not, so it is written to be run by Camunda Process Test.","unreadable":"The diagram could not be read.","noAgents":"The diagram has no AI agent element.","noSuchAgent":"The diagram has no AI agent with the id {id}.","noJobType":"The agent has no fixed job type to stub (template {template}), so no scenario was made for it.","name":"Agent {agent} answers without a tool call","description":"Made by Penstock for the agent {agent}, with the model answer stubbed."}},"scriptTab":{"title":"{name} - {what}","nameWithId":"{name} ({id})","script":"script","condition":"condition","executionListener":"{event} listener","taskListener":"{event} task listener","input":"input {name}","output":"output {name}"},"feel":{"debug":{"action":"Debug expression","breakpoint":{"otherFile":"Breakpoints can only be set in the expression that is being debugged","pastEnd":"This line is after the end of the expression"},"error":"Error: {message}","group":{"after":"Variables after the script","current":"Current","evaluated":"Evaluated","iteration":"Iteration variables","variables":"Variables"},"request":{"unsupported":"This debugger does not support {command} yet"},"stack":{"name":"Expression"},"title":"FEEL debug: {name}","truncated":"The trace stopped after {count} steps, so the rest of the expression is not stepped through","type":{"name":"FEEL expression debug"},"unsupported":"The debugger does not follow this construct yet (at character {at})","launch":{"invalid":"The debug configuration needs an expression, its sample values and its source"},"notStarted":"The expression is not being debugged"},"problem":{"doubleEquals":"FEEL compares with =, not ==","spacedName":"A name with spaces needs backticks","unclosedBracket":"This bracket is never closed","missingElse":"An if needs an else","endsTooEarly":"The expression ends too early","unexpectedToken":"This is not expected here","unterminatedString":"This string is never closed","notFeel":"This is not a FEEL expression"},"fix":{"replace":"Replace with {text}"},"run":{"lens":"Run expression","channel":"Penstock FEEL","input":"{name} = {value}","result":"Result from {source}: {value}","warning":"{text} gives a warning: {type}","engineWarning":"Warning: {message}","rejected":"Not run: {message}","failed":"The engine failed: {problem}","noEngine":"No Camunda 8 engine is connected, so the expression ran in the editor (preview).","inline":"→ {value}","error":"The expression could not be run: {message}","inlineFailed":"✕ {message}","sample":{"prompt":"Sample value for {name}","rejected":"The value of {name} is not valid FEEL: {problem}","warned":"The value of {name} reads a name that has no value","invalidJson":"The value of {name} is neither JSON nor a FEEL expression"}},"source":{"preview":"preview","engine":"engine"}},"clientFacts":{"sentence":{"notFound":"Python, Go, C# and Scala workers are not read because the Penstock CLI was not found.","incompatible":"Python, Go, C# and Scala workers are not read because the Penstock CLI is too old for this editor.","untrusted":"Python, Go, C# and Scala workers are not read until this project is trusted.","failed":"Python, Go, C# and Scala workers are not read because the Penstock CLI failed.","timedOut":"Python, Go, C# and Scala workers are not read because the Penstock CLI took too long to answer.","tooLarge":"Python, Go, C# and Scala workers are not read because the project has too many of their files."},"hint":{"install":"Install the Penstock CLI with npm install -g @kern0x1b/penstock-cli, or set its path in the Penstock settings.","trust":"Trust the project to use its own CLI.","check":"Check the Penstock CLI in the terminal with penstock facts, then open the diagram again.","fewerFiles":"Keep the code of these languages in fewer files, or leave them out of the project."}},"connections":{"kind":{"secret":"secret","mcpClient":"MCP client","property":"property"},"finding":{"secretUndefined":"Secret {name} is not defined in any file of the project","secretUndefinedIn":"Secret {name} is not defined for {environment}","secretUndefinedHint":"The project also reads secrets from {providers}, whose names Penstock cannot see.","secretPrefix":"Secret {name} is defined without the prefix {prefix}, so the runtime ignores it","mcpClientUndefined":"No MCP client {name} is configured","mcpClientUndefinedIn":"No MCP client {name} is configured for {environment}","propertyRenamed":"{name} is called {replacement} in Camunda 8.8","propertyRemoved":"{name} is not read by Camunda 8.8","secretMissing":"Secret {name} is defined for {against} and missing for {environment}","keyMissing":"{name} is set for {against} and missing for {environment}"},"screen":{"title":"Connections","help":"The secrets and MCP clients your diagrams and templates refer to, and where each one is defined. Only names are shown, never values.","environment":"Environment","allFiles":"All files","compareWith":"Compare with","compareNone":"Nothing","summary":"{defined} defined, {missing} not defined","referenced":"Referenced by your diagrams","column":{"name":"Name","kind":"Kind","status":"Status","usedIn":"Used in","definedIn":"Defined in","missingIn":"Missing in","names":"Names"},"status":{"defined":"Defined","undefined":"Not defined","unverifiable":"Cannot be checked here"},"unverifiableHint":"No file in this project supplies these, so they may live in a cloud console, a vault or the cluster.","unused":"Defined and not used","sources":"Where names are defined","opaque":"Values read from outside the project","opaqueItem":"{place} reads {from}, whose names cannot be seen","open":"Open","copyName":"Copy name","copied":"Name copied","unknownEnvironment":"No file names the environment {environment}.","pro":{"title":"Compare environments","text":"See which secrets and keys one environment lacks compared with another, before you deploy. Included in Pro.","unlock":"Unlock with Pro"},"reconcile":{"title":"{environment} compared with {against}","missing":"Missing in {environment}","onlyIn":"Only in {environment}","none":"{environment} has everything {against} has.","used":"used by a diagram"},"empty":{"title":"Nothing to map yet","hint":"Refer to a secret in a connector as secrets.NAME or set an MCP client id, then keep the values in a connector-secrets file, .env, docker-compose.yml or Helm values."},"loading":"Reading the project","failed":{"title":"The connections could not be read","hint":"Open a project folder and try again."}}},"cmmn":{"notCmmn":"This is not a CMMN case model: the file has no definitions element of the CMMN 1.1 model namespace.","kind":{"casePlanModel":"Case plan model","stage":"Stage","humanTask":"Human task","processTask":"Process task","caseTask":"Case task","decisionTask":"Decision task","task":"Task","milestone":"Milestone","eventListener":"Event listener","timerListener":"Timer event listener","userListener":"User event listener","unknown":"Plan item without a definition"},"dialect":{"camunda":"Camunda 7","flowable":"Flowable","plain":"Plain CMMN 1.1"},"finding":{"duplicateId":"The id {id} is used by more than one element.","definitionRefMissing":"The plan item {id} has no definitionRef, so it does nothing.","definitionRefUnknown":"The plan item {id} points at {target}, and nothing has that id.","danglingSentryRef":"The criterion {id} points at the sentry {target}, and there is no such sentry.","sentryRefMissing":"The criterion {id} has no sentryRef, so it can never be satisfied.","danglingOnPart":"The on-part {id} waits for the plan item {target}, and there is no such plan item.","onPartSourceMissing":"The on-part {id} has no sourceRef, so it waits for nothing.","taskWithoutTarget":"The {kind} {id} does not say what it calls.","noCasePlanModel":"The case {id} has no case plan model.","noCase":"The file has no case.","planLimit":"The case plan has more than {limit} plan items, so the rest is not shown.","planCycle":"The plan item {id} is a stage that contains {target}, which it is already inside, so it is shown without its contents."},"prop":{"case":"Case","cases":"Cases in the file","id":"Id","planItems":"Plan items","sentries":"Sentries","dialect":"Flavour","kind":"Kind","name":"Name","definition":"Definition","rule":{"required":"Required","repetition":"Repeats","manualActivation":"Starts manually"},"always":"always","entryCriterion":"Entry criterion","exitCriterion":"Exit criterion","documentation":"Documentation","on":"Belongs to","sentry":"Sentry","missingSentry":"sentry {id} (not in the file)","noSentry":"no sentry","onPart":"{item}: {event}","ifPart":"if {condition}"},"canvas":{"label":"Case model diagram. Drag to move, use the buttons or plus and minus to zoom, zero to fit.","zoom":"Zoom","zoomIn":"Zoom in","zoomOut":"Zoom out","fit":"Fit"},"props":{"none":"Nothing to show","noneHint":"The file could not be read as a case model.","readOnly":"Read only. Penstock does not edit case models.","select":"Select an element in the diagram to see its properties."},"problems":{"clean":"No dangling references, repeated ids or tasks without a target."},"viewer":{"readOnly":"Penstock shows case models but cannot edit them. To change this file, open it as text.","openAsText":"Open as text","unreadable":"This file cannot be shown as a case model","empty":"This case model has nothing to draw","emptyHint":"The file has no case plan model. The Problems tab says what is missing."}},"incident":{"read":{"answered":"The engine answered {status} when the incident was read.","notJson":"The engine answered with something that is not JSON.","noInstance":"The incident {key} does not say which instance it belongs to.","noSuchInstance":"The engine has no incident or instance {key}.","noIncident":"The instance {key} has no open incident."},"note":{"elementGone":"The diagram no longer has the element {element}, so the incident cannot be reproduced on it.","pathElementsGone":"These elements of the path are not in the diagram any more and were left out: {elements}.","redacted":"Values that looked secret were replaced by a placeholder in these variables: {names}.","currentVariables":"The engine keeps no history of the start values, so the variables are those the instance has now.","taskVariables":"The values submitted in the user tasks are not kept by the engine, so each task is completed with none. Add them if the incident depends on them.","correlationKey":"A message could not get its correlation key from the variables, so it is sent without one.","calledProcess":"{element} calls another process, which a scenario cannot stand in for, so it may not run.","otherIncidents":"The instance has more incidents. The scenario reproduces only the one you picked.","mustHappenByItself":"{element} is not a job, so the scenario cannot make it fail; the incident has to arise by itself from the start values."},"scenarioName":"Reproduce incident at {element} ({type})","noType":"unknown type","scenarioDescription":"Made from the incident of instance {instance}. Secret-looking values are replaced by placeholders.","fixName":"Fix check: {name}","prompt":{"intro":"An incident stopped a process instance at the element {element} of {file}. Its type is {type}.","message":"The engine's message:\\n{message}","detail":"Its trace, redacted:\\n{detail}","variables":"The instance's variables, with secret-looking values replaced by placeholders:\\n{variables}","scenario":"This Penstock scenario reproduces the incident:\\n{scenario}","notes":"What the scenario could not take from the engine:\\n{notes}","task":"Propose a change to the diagram that removes this incident. Change only what the incident needs. Penstock will run the scenario again on your proposal and show whether the incident is gone."},"step":{"start":"Start {process} with {names}","startEmpty":"Start {process} with no variables","mock":"Complete the jobs of type {type}","task":"Complete the user task {element}","message":"Send the message {name}","signal":"Broadcast the signal {name}","timer":"Fire the timer {element} at once","fail":"Fail the job at {element} with no retries left","expect":"Expect an incident of type {type} at {element}","expectAny":"Expect an incident at {element}"},"node":{"noEngine":"The project has no engine to read the incident from. Set deployment.url in penstock.yaml.","noDiagram":"No diagram in the project defines the process {process}.","noRunEngine":"The project has no engine to run the scenario on."},"reproduce":"Reproduce as scenario","reproduceHint":"Build a scenario that raises this incident again","dialog":{"title":"Reproduce incident","intro":"The scenario starts the process with the variables of this instance, with anything that looks secret replaced by a placeholder, follows the path it took and ends on the same incident. Previewing is free, with no time limit.","reading":"Reading the incident from the engine…","steps":"Scenario steps","notes":"What could not be taken from the engine","save":"Save scenario","saveAndRun":"Save and run","run":"Run scenario","proposeFix":"Propose a fix","noChat":"Turn on the AI chat to ask the agent for a fix.","saved":"Saved to {file}.","alreadySaved":"{file} already has this scenario.","sent":"Sent to the agent with the scenario, the redacted incident and the diagram. A proposed change shows on the canvas with the scenario result next to it.","chatFailed":"The message could not be sent to the agent.","noDiagram":"The diagram could not be read.","noEngine":"No engine marked for tests is set up for this project."},"fix":{"running":"Running the scenario on the proposed diagram for {element}…","passes":"Scenario now passes: the incident at {element} no longer happens.","fails":"Scenario still fails: the incident at {element} still happens.","failsWhy":"Scenario still fails at {element}: {reason}","unavailable":"The scenario could not be run on the proposed diagram: {reason}","needsClick":"This fix adds executable content: {what}. Penstock does not run it by itself.","check":"Check this fix","notTestEngine":"Not run by itself: the engine is not marked for tests (deployment.forTests: true) and is not a local engine you confirmed for tests.","executable":{"script":"a script on {element}","listener":"a listener on {element}","service":"a service call on {element}","connector":"a connector on {element}","expression":"an expression that calls out on {element}","unknownElement":"an element that could not be read","other":"a change to executable content on {element}"}}},"aiAgents":{"field":{"provider":"Provider and model","backend":"Backend","template":"Template","systemPrompt":"System prompt","userPrompt":"User prompt","maxModelCalls":"Model calls at most","storage":"Storage","contextWindow":"Context window","responseFormat":"Response format","parseJson":"Parse as JSON","schema":"Response schema","humanApproval":"Human approval"},"filter":{"dynamic":"set by an expression","included":"Allowed: {names}","excluded":"Blocked: {names}"},"findings":{"none":"Nothing found.","count":{"one":"{count} problem","other":"{count} problems"}},"kind":{"task":"AI agent task","subprocess":"AI agent sub-process"},"mcp":{"none":"No MCP clients.","defined":"configuration found","undefined":"configuration missing","unverifiable":"not checked","remote":"remote, {transport}"},"migrate":{"accept":"Migrate","button":"Migrate to the 8.10 template","cancelled":"Nothing was changed.","confirmText":"{migrated} element(s) will be rewritten, {untouched} left untouched. Save the diagram afterwards to keep the change.","confirmTitle":"Migrate this agent?","done":"Migrated {migrated} element(s), left {untouched} untouched. Save the diagram to keep the change.","failed":"The migration failed: {reason}","hint":"Rewrites this agent on the 8.10 template in the open diagram. The result is checked by reading it back; anything it cannot prove stays as it is. Save the diagram to keep it.","nothing":"Nothing to migrate: this agent is already on the 8.10 template.","untouched":"Left untouched: {reason}"},"orphans":"Tool containers no agent uses","param":{"name":"Parameter","type":"Type","description":"Description for the model","noType":"no type","noDescription":"no description","schema":"schema given"},"prompt":{"empty":"empty"},"scenario":{"button":"Make scenario","hint":"Adds a scenario with the model stubbed to the diagram’s scenarios (Penstock Pro).","written":"Scenario added to {file}.","exists":"The scenario is already in {file}.","failed":"No scenario: {reason}"},"screen":{"title":"AI agents","help":"Every AI agent task and sub-process of the project, with the tools the model can call and the MCP clients it uses. Select an agent to open it in its diagram.","loading":"Reading the project","open":"Open in the diagram","failed":{"title":"The AI agents could not be read","hint":"Open a project folder and try again."},"empty":{"title":"No AI agents yet","hint":"Add an AI agent task or sub-process from the Camunda 8.10 templates to a diagram of the project."},"column":{"agent":"Agent","kind":"Kind","model":"Model","tools":"Tools","mcp":"MCP clients","problems":"Problems"},"agentCount":{"one":"{count} AI agent","other":"{count} AI agents"},"problemCount":{"one":"{count} problem","other":"{count} problems"}},"section":{"model":"Model","prompts":"Prompts","tools":"Tools","limits":"Limits","memory":"Memory","guardrails":"Guardrails","mcp":"MCP clients","findings":"Problems"},"select":"Select on the canvas","severity":{"error":"error","warning":"warning"},"standalone":"MCP clients no agent uses","tab":{"emptyTitle":"No AI agent in this diagram","emptyHint":"Add an AI agent task or sub-process from the Camunda 8.10 templates. Select the agent, its tool container or one of its tools to see what the model sees.","listHint":"Select an agent on the canvas, or here, to see its prompts, tools and limits."},"template":{"deprecated":"deprecated template","migrate":"This element uses a template version that Camunda 8.10 deprecates. Move it to the new template with penstock migrate agents."},"tool":{"noDescription":"No description: the model sees only the name","noParameters":"The model fills in no parameters"},"tools":{"none":"No tools in the tool container.","noContainer":"The agent names no tool container.","containerMissing":"The tool container {id} is not in the diagram.","dynamicContainer":"The tool container is set by an expression.","count":{"one":"{count} tool","other":"{count} tools"}},"value":{"notSet":"not set","yes":"yes","no":"no","none":"none","nothing":"nothing"}},"receipt":{"title":"Verification receipt","verdict":{"verified":"Verified","findings":"Has new findings","notVerified":"Not verified"},"reason":{"newErrors":"The change introduced new errors.","newWarnings":"The change introduced new warnings.","scenarioFailed":"A scenario failed.","executableAdded":"The change adds content that runs: a script, a listener, an expression or a service.","connectionsIntroduced":"The change introduced a problem with a secret or a connection.","unreadable":"A changed file could not be read.","tooManyFiles":"The change touches more than {files} files, which is more than Penstock verifies.","tooLarge":"A changed file is larger than {megabytes} MB, which is more than Penstock verifies.","checkFailed":"The check could not run.","builtInRules":"The check used the built-in rules only, so the project's own rules were not applied.","scenariosWithheld":"Scenarios were not run, so the change is not fully verified."},"outcome":{"passed":"passed","failed":"failed","skipped":"skipped"},"summary":"{verdict}: {problems}, {scenarios}","newProblems":{"one":"{count} new problem","other":"{count} new problems"},"scenariosNotRun":"scenarios not run","scenariosSomeFailed":{"one":"{failed} of {count} scenario failed","other":"{failed} of {count} scenarios failed"},"scenariosPassed":{"one":"{count} scenario passed","other":"{count} scenarios passed"},"formattingOnly":"formatting only","diffCounts":"{added} added, {removed} removed, {changed} changed","moved":{"one":"{count} moved","other":"{count} moved"},"change":{"added":"added","removed":"removed","changed":"changed"},"checkLine":"Check: {before} problems before, {after} after, {resolved} fixed","freshLine":"new {severity} {rule} in {file}{where}","severity":{"error":"error","warning":"warning","note":"note"},"kind":{"script":"a script","listener":"a listener","service":"a service call","connector":"a connector","expression":"an expression","other":"executable content"},"executableLine":"adds {kind} in {element} ({file})","wasBefore":"(before: {outcome})","skip":{"no-processes":"no process was changed","not-licensed":"running scenarios is part of Penstock Pro","no-cases":"the process has no saved scenarios","no-engine":"no engine is configured for this project","not-for-tests":"the engine is not marked deployment.forTests","failed":"the run could not start","stopped":"the run was stopped before it ended","executable-added":"content that runs was added, so they were not run; run them with penstock receipt verify --run-scenarios","project-changed":"the change touches the project configuration or the test files","not-asked":"they were not requested; pass scenarios: true to ask","deployable-changed":"a decision, form, template or case that a run would deploy changed; run them with penstock receipt verify --run-scenarios","not-inspected":"part of the change could not be fully inspected (too many files, a file too large or unreadable)"},"scenariosSkipped":"Scenarios were not run: {reason}.","layoutApplied":{"one":"Auto layout or formatting was applied: {count} element moved.","other":"Auto layout or formatting was applied: {count} elements moved."},"attempt":{"one":"Attempt {n}: {count} new problem found.","other":"Attempt {n}: {count} new problems found."},"attemptHandedBack":{"one":"Attempt {n}: {count} new problem handed back to the agent.","other":"Attempt {n}: {count} new problems handed back to the agent."},"exhausted":{"one":"The agent did not fix them in {count} attempt.","other":"The agent did not fix them in {count} attempts."},"previewNote":"This is the free preview. The full receipt - the files, the new problems, the scenarios and the attempts - is part of Penstock Pro.","problem":{"type":"has the wrong kind of value","enum":"is not one of the allowed words","const":"has the wrong value","missing":"is missing","unknown":"is not a known key","forbidden":"is not allowed","tooLong":"is too long","tooShort":"is too short","tooMany":"has too many entries","tooFew":"has too few entries","range":"is out of range","shape":"has the wrong shape","deep":"is nested too deeply","reference":"points at nothing","choice":"does not fit any allowed form","tooLarge":"is larger than Penstock reads","notJson":"is not JSON"},"repair":{"intro":{"one":"Penstock checked your change and found {count} new error. Fix it without undoing the rest of the change (repair {n} of {max}).","other":"Penstock checked your change and found {count} new errors. Fix them without undoing the rest of the change (repair {n} of {max})."},"line":"- {rule} in {file}{where}: {message}","more":"and {count} more","outro":"Change only what is needed to fix them. Penstock checks again when you are done."},"checking":"Checking the change","rules":{"project-changed":"Checked with built-in rules only: project rules changed.","untrusted":"Checked with built-in rules only: this project's rules are not trusted (penstock trust).","not-inspected":"Checked with built-in rules only: part of the change could not be fully inspected."}},"dmnTests":{"unknownDecision":"There is no decision with the id {decision} in this file.","notEvaluated":"The decision {decision} could not be evaluated.","unreadableCells":"Penstock cannot evaluate these cells: {cells}.","outputDiffers":"{output}: expected {expected}, got {actual}","nothing":"nothing","rulesDiffer":"applied rules: expected {expected}, got {actual}","outside":"{file} is outside the project and is not read.","unreadable":"{file} cannot be read.","tooLarge":"{file} is larger than Penstock reads.","invalid":"{file} is not a valid test file: {problems}","dmnUnreadable":"{file} cannot be read as a DMN file.","tooMany":"A test file holds at most {max} cases.","notCovered":"rules not covered: {rules}","shadowed":"matched but never applied: {rules}","coverage":"{covered} of {total} rules covered ({percent}%)","pass":"pass","fail":"FAIL","error":"ERROR","rules":"rules {rules}","skipped":"not run: {count} (more than 3 cases per decision are part of Penstock Pro)","summary":"{passed} passed, {failed} failed, {errors} errors; rule coverage {percent}%","ui":{"title":"Saved tests for {decision}","runAll":"Run all","run":"Run","remove":"Remove","name":"Name","status":"Status","passed":"Passed","failed":"Failed","errored":"Error","notRun":"Not run","emptyTitle":"No saved tests for this decision yet","emptyHint":"Try values in the Try tab and press Save as test, or add a case from a rule below.","noDecisionTitle":"Select a decision table to see its tests","noDecisionHint":"Open a decision table, then save the cases you want to keep running.","noFileTitle":"Save the file to keep tests","noFileHint":"Tests are kept next to the DMN file as <name>.dmn.tests.json, so the file needs a place on disk.","coverageTitle":"Rule coverage","policyNote":"Counted for hit policy {policy}: a rule is covered when a case applies it.","notCoveredTitle":"Not covered","allCovered":"Every rule is covered by a saved case.","addCase":"Add case from rule {rule}","noSample":"Rule {rule} has a condition Penstock cannot turn into a value, so add its case from the Try tab.","matched":"Rules applied: {rules}","noRule":"No rule matched.","useActual":"Use the actual result as expected","freeLimit":"The free run covers 3 cases per decision. More cases, and running them from the command line, are part of Penstock Pro.","saveAsTest":"Save as test","testName":"Test name","defaultName":"Case {number}","saved":"Saved as test: {name}","saveFailed":"The test could not be saved: {reason}","loadFailed":"The saved tests could not be read: {reason}","cases":"Cases: {count}","nothingToSave":"Fill in the values of the Try tab first."}},"policy":{"refuse":{"shape":"\\"{key}\\" in the policy has the wrong shape.","tooMany":"The policy lists too many {what} (at most {max}).","rule":"The rule name \\"{rule}\\" is not allowed in a policy.","ruleKey":"The rule \\"{rule}\\" has an unknown setting \\"{key}\\".","severity":"The rule \\"{rule}\\" needs a severity of error, warn or off, and forced as true or false.","forcedOff":"The rule \\"{rule}\\" cannot be forced and off at the same time.","unknownKey":"The policy has an unknown entry \\"{key}\\".","plugin":"The policy names \\"{key}\\". A policy is data only and never loads or runs code, so it was refused.","unsafeKey":"The policy uses the reserved key \\"{key}\\".","name":"The policy needs a name of letters, digits, dots, dashes or underscores, at most 64 characters.","version":"The policy needs a version that is a whole number from 1 up.","palette":"The palette entry \\"{name}\\" is not an element the palette has.","path":"The path \\"{path}\\" must be a relative path inside the policy folder.","requiredChecks":"\\"{key}\\" is not a required check the policy knows (check, scenarios, dmnTests, receipt).","notJson":"{file} in the policy folder is not valid JSON.","notObject":"{file} in the policy folder must be one JSON object.","deep":"A policy file nests deeper than it is allowed to.","manifestMissing":"The policy folder has no {file}.","dirMissing":"The policy folder {path} does not exist.","outside":"The policy folder {path} is not a plain folder inside the project, so it was not read.","symlink":"{file} in the policy folder is a symbolic link, which a policy never follows.","notData":"{file} in the policy folder is not a data file (json, yaml, yml, md or txt).","unreadable":"{file} in the policy folder could not be read as data.","fileCount":"The policy folder has more than {max} files.","fileSize":"{file} in the policy folder is larger than {max} bytes.","totalSize":"The policy folder is larger than {max} bytes in all.","depth":"The policy folder has folders nested more than {max} deep.","pathMissing":"The policy names {path}, but the policy folder has nothing there.","lock":"{file} could not be read as a pin.","pin":"The pin is not a sha256 hash (sha256: and 64 hexadecimal digits)."},"header":{"pinned":"Policy: {name} v{version}, pinned","unpinned":"Policy: {name} v{version}, not pinned","mismatch":"Policy: {name} v{version}, the pin does not match","refused":"Policy refused: it could not be read as data"},"findingTag":"[policy: {name}]","init":{"exists":"{file} already exists; nothing was changed.","wrote":"Wrote {file}.","next":"Add rules with penstock policy add-rule, then fix the pack with penstock policy pin."},"addRule":{"severity":"The severity \\"{given}\\" is not one of {allowed}.","wrote":"Set the rule {rule} to {severity} {forced}","forced":"(forced)"},"pin":{"again":"The pack changed: run penstock policy pin to fix it again.","jsonConfig":"{file} is JSON, which this command does not rewrite. Put \\"policy\\": {\\"pin\\": ...} in it by hand, or use penstock.yaml.","wroteLock":"Pinned the policy in {file}: {pin}","configBroken":"{file} could not be read, so the pin was not written.","wrote":"Pinned the policy in {file}: {pin}"},"verify":{"none":"There is no policy pack here (.penstock/policy or a policy entry in penstock.yaml).","refused":"The policy pack was refused:","unpinned":"The policy pack is not pinned. Its hash is {hash}; run penstock policy pin to record it.","mismatch":"The policy pack does not match its pin.\\n pinned: {expected}\\n computed: {actual}\\nA file was changed, added or removed since it was pinned.","ok":"Policy {name} v{version} matches its pin (files: {files})."},"sync":{"noSource":"penstock.yaml has no policy: source: to fetch from.","badUrl":"The policy source must be an https:// or ssh:// address or a git@host:path address. A local folder on this machine is accepted only with --allow-local-source, and a network share never is.","badRef":"The policy ref must be a plain branch or tag name.","failed":"git could not fetch the policy pack. Nothing was installed.","refused":"The fetched policy pack was refused and nothing was installed:","pinRefused":"The fetched pack does not match the pin, so it was not installed.\\n pinned: {expected}\\n fetched: {actual}","done":"Fetched policy {name} v{version} into {dir}.","pinned":"It matches the pin.","mismatch":"It does not match the pin ({expected} against {actual}).","unpinned":"It is not pinned yet: run penstock policy pin."},"gate":{"refused":"The policy pack was refused, so the policy could not be checked:","unpinned":"The policy is not pinned (run penstock policy pin and commit the result).","mismatch":"The policy files do not match the pin ({expected} pinned, {actual} found).","ruleOff":"The forced rule {rule} is turned off.","severity":"The severity of the forced rule {rule} is lowered ({change}).","ruleUnreadable":"The setting of the forced rule {rule} could not be read.","palette":"The palette is wider than the policy allows ({name}).","checkFailed":"The check found errors, and the policy requires it to pass.","required":{"missing":"The policy requires {check}, and it has not run.","failed":"The policy requires {check}, and it failed.","stale":"The policy requires {check}, and its last run was for different files than these."},"ok":"Policy {name} v{version}: pinned, not weakened, required checks done.","failed":"Policy {name} v{version} is not met:"},"check":{"scenarios":"scenarios","dmnTests":"DMN tests","receipt":"the AI change receipt"},"show":{"none":"There is no policy pack here. Create one with penstock policy init.","folder":"Folder: {dir}","hash":"Hash: {hash}","forced":"Forced rules: {rules}","defaults":"Default rules: {rules}","palette":"Palette: {names}","required":"Required checks: {names}","nothing":"none"},"ciNeedsTeam":"Enforcing a policy pack in a pipeline is a Team feature.","screen":{"title":"Policy","empty":"This project has no policy pack.","emptyHint":"A policy pack is a folder in git that sets rules, conventions, a palette and required checks for everyone. Create one with penstock policy init.","locked":"Set by policy","lockedHint":"This setting comes from the policy {name}. Change it in the policy pack, not here.","folder":"Folder","hash":"Hash","files":"Files","rules":"Rules","noRules":"The policy sets no rules.","forced":"forced","default":"default","severity":{"error":"error","warn":"warning","false":"off"},"palette":"Palette","noPalette":"The policy does not limit the palette.","conventions":"Conventions","noConventions":"The policy sets no conventions.","templates":"Element templates","noTemplates":"The policy adds no element templates.","requiredHeading":"Required checks","noRequired":"The policy requires no checks.","required":{"check":"The check passes","scenarios":"Scenarios pass","dmnTests":"DMN tests pass","receipt":"An AI change receipt exists"},"refused":"The pack was refused and none of it applies","close":"Done"},"dialog":{"title":"Policy"}},"promotion":{"approval":{"badHash":"The hash of {file} should be 64 hexadecimal characters.","expired":"The approval ended at {until}.","fileChanged":"{file} has changed since it was approved.","fileNotApproved":"{file} is not in the approval.","inTheFuture":"The approval is dated in the future.","missing":"The approval should have {field}.","notJson":"The approval is not valid JSON.","notObject":"The approval should be a JSON object.","nothingToApprove":"No file is being promoted, so there is nothing to approve.","otherEnvironment":"The approval is for {approved}, and this promotion goes to {target}.","outside":"The approval file should be a regular file inside the project, not a link.","tooLarge":"The approval file is larger than 256 KB.","tooManyFiles":"The approval lists more than {limit} files.","unknownKey":"The approval has a key Penstock does not know: {key}.","unreadable":"The approval file could not be read.","version":"The approval should have version 1.","windowBackwards":"The approval ends before it was given.","windowTooLong":"The approval should be valid for at most {days} days."},"deploy":{"protectedNothingSent":"{name} is protected and nothing was sent.","onlyChanged":"What is sent","onlyChangedHint":"Only what changed: skip what the engine already runs","nothingToSend":"Nothing was sent to {target}: {names} is the same as what it runs (unchanged, skipped).","confirmLabel":"Type {name} to confirm","protectedHint":"{name} is a protected environment: nothing is deployed to it until you type its name."},"drift":{"needsEnvironment":"Name the environment to read with --env. Environments: {known}."},"environment":{"noEngineApi":"This engine has no deployment API that Penstock reads.","noUrl":"The environment has no deployment.url.","inheritedUrl":"The profile does not set its own deployment.url, so it would reach the engine of another environment.","unknown":"{name} is not an environment of penstock.yaml. Environments: {known}."},"onlyChanged":{"notCompared":"Could not compare with the engine ({reason}), so everything is sent.","unchanged":"unchanged, skipped"},"project":{"tooMany":"The project has more than {limit} diagrams, decisions and forms, so nothing was compared."},"promote":{"approvalRefused":"The approval {file} was refused:","duplicate":"{key} is defined in more than one file: {files}.","formNotRecorded":"No record that this form was deployed to {from}.","needsApproval":"{name} is protected, and in a pipeline it needs an approval record: pass --approve-file.","needsBoth":"Name both environments: penstock promote --from <environment> --to <environment>.","needsConfirm":"{name} is protected: pass --confirm {name} to say you mean it.","notRead":"{name} could not be read: {reason}","notReady":"{name} cannot be used: {reason}","notVerified":"not the content on {from} ({state})","policyFailed":"The policy pack {name} v{version} is not satisfied, and a pipeline enforces it.","sameEngine":"Both environments point to {place}.","sameEnvironment":"The source and the target are the same environment.","sameFileName":"Two files would be deployed as {name}: {first} and {second}.","secretMissing":"{name} is not defined for {target}.","unreadable":"{file} cannot be read as a diagram, so it is not promoted."},"read":{"credentials":"The engine refused the credentials (status {status}).","noResource":"The engine sent no resource for {key}.","notJson":"The engine answered something that is not JSON.","status":"The engine answered with status {status}.","tooLarge":"The resource of {key} is too large to compare.","tooMany":"The engine has more than {limit} definitions, so nothing was compared.","tooManyToRead":"More than {limit} resources would have to be read from the engine, so nothing was compared.","unreachable":"The engine could not be reached: {reason}"},"text":{"approvalIsARecord":"An approval is a record kept in git: it names who approved and when, and it is checked against the files. It is not a signature or a cryptographic proof.","approvalNotOk":"The approval record was refused.","approvalOk":"Approval record accepted: approved by {by} at {at}, valid until {until}.","blocked":"Blocked:","cannotVerify":"cannot be checked here","comparison":"{a} compared with {b}:","compatOk":"The files fit the engine.","compatTitle":"Compatibility with {to} (engine {version}):","confirmed":"Confirmed with --confirm.","deployFailed":"The deployment failed: {message}","deployed":"Deployed: {message}","driftTitle":"Drift: {names}","forTests":"for tests","formsNotCompared":"Forms are not read from an engine and are not compared ({count}).","header":{"action":"Action","details":"Details","file":"File","resource":"Resource"},"noAddress":"no address","noApproval":"No approval record was given (--approve-file).","noPolicy":"No policy pack in this project.","noSecretsMissing":"Nothing the files name is missing.","notConfirmed":"Not confirmed: pass --confirm {name}.","nothingFound":"No process or decision found.","nothingToPromote":"Nothing to promote: the target already has these files, or nothing is verified on the source.","policyEnforcedFailed":"Enforced in this pipeline: not satisfied.","policyEnforcedOk":"Enforced in this pipeline: satisfied.","policyLine":"Policy {name} v{version}, {pin}.","policyNotEnforced":"Shown only: a pipeline enforces it (Team).","policyTitle":"Policy pack:","protected":"protected","protectionTitle":"{to} is a protected environment:","runWrite":"Run again with --write to promote {from} to {to}.","sameEverywhere":"{a} and {b} have the same content.","sameOnTarget":"same on {to}","secretsTitle":"Secrets and clients {to} needs:","unknownVersion":"version not known","unreadable":"Not readable as diagrams: {files}.","promotingNow":"Promoting {from} to {to}","dryRun":"Dry run: promoting {from} to {to} (nothing is sent)","pin":{"pinned":"pinned","unpinned":"not pinned","mismatch":"does not match its pin"}},"state":{"in-sync":"in sync","local-ahead":"local ahead","engine-ahead":"engine ahead","differs":"differs","only-local":"only local","only-engine":"only on engine","in-syncHint":"The file and the engine have the same content","local-aheadHint":"Your file changed since it was last deployed here, and the engine still has that deployment","engine-aheadHint":"The engine runs something else than the last deployment from here, and your file did not change since","differsHint":"Changed on both sides, or there is no record of a deployment from here","only-localHint":"The engine does not have it yet","only-engineHint":"The engine has it, and no file of the project defines it"},"status":{"read":"read","unreachable":"not reachable","refused":"refused","not-configured":"not set up"},"action":{"create":"create","update":"update","unchanged":"unchanged","skipped":"skipped"},"compare":{"same":"same","different":"{a} and {b} differ","only-a":"only on {a}","only-b":"only on {b}"},"compat":{"family":"{file} is written for {subject} ({found}), and {target} is {wanted}.","newer":"{file} targets version {found}, newer than the engine of {target} ({wanted}).","template":"{file} uses the element template {subject}, which needs engine {found}, and {target} runs {wanted}.","unknown-version":"{file} names version {found}, which cannot be compared with {wanted}."},"count":{"file":{"one":"{count} file to deploy","other":"{count} files to deploy"}},"screen":{"title":"Environments and drift","help":"Compares your files with the latest version each environment runs. Nothing is changed, and only environments that penstock.yaml declares are asked.","loading":"Reading the environment…","failed":{"title":"The comparison could not be made","hint":"Check the connection of the environment, then refresh."},"environment":"Environment","compareWith":"Compare with","compareNone":"No comparison","hideSynced":"Hide what is in sync","refresh":"Refresh","clean":"Everything is in sync.","empty":{"title":"No process or decision found","hint":"Add a BPMN or DMN file to the project to compare it with an environment."},"pro":{"title":"Compare two environments","text":"Reading one environment against your files is free, with no time limit. Comparing two environments with each other, and promoting between them, is part of Pro.","unlock":"Unlock comparison"}}},"evidence":{"zip":{"badName":"The name \\"{name}\\" is not allowed in a pack: it should be a relative path inside the pack.","tooManyFiles":"The pack would hold more than {limit} files, so it was not written.","duplicate":"The name \\"{name}\\" appears twice in the pack.","tooLarge":"The file \\"{name}\\" is larger than a pack allows.","tooBig":"The pack would be larger than {megabytes} MB, so it was not written or read.","malformed":"The file is not a readable zip.","special":"\\"{name}\\" is a link or a special file, which a pack never holds.","unsupported":"The entry \\"{name}\\" is encrypted or compressed in a way a pack does not use.","crc":"The entry \\"{name}\\" does not match its stored checksum."},"write":{"symlink":"\\"{path}\\" is a link, and a pack is never written through a link.","notTheKind":"\\"{path}\\" is not the kind of place a pack can be written to.","exists":"\\"{path}\\" already exists. Use --force to replace it.","notAPack":"\\"{path}\\" is a folder that is not an evidence pack, so it was left alone even with --force."},"verify":{"tooDeep":"\\"{path}\\" is nested deeper than a pack goes.","manifestUnreadable":"The manifest evidence.json cannot be read as a Penstock evidence manifest.","missing":"\\"{path}\\" does not exist.","unreadable":"\\"{path}\\" could not be read.","noManifest":"The pack has no evidence.json manifest.","noSeal":"The pack has no evidence.sha256 seal.","sealUnreadable":"The seal evidence.sha256 is not in the expected form.","sealMismatch":"The manifest does not match its seal: it was changed after the pack was built.","missingFile":"The manifest lists \\"{file}\\" but the pack does not hold it.","changedFile":"\\"{file}\\" was changed: its checksum or size no longer matches the manifest.","extraFile":"\\"{file}\\" is in the pack but not in the manifest."},"dialog":{"title":"Create evidence pack","intro":"One package for an audit: the diagrams, the checks, the recorded test results, the AI receipts and a list of every file with its SHA-256. It never holds a secret value.","since":"Changes since","sinceHint":"A git ref such as origin/main. The pack then also shows what changed, drawn in diagram terms.","sinceError":"The ref should be a branch, tag or commit name without spaces","format":"Format","formatZip":"A zip file","formatDir":"A folder","replace":"Earlier pack","replaceBox":"Replace the pack that is already there","create":"Create pack","running":"Building the pack…","ready":"The pack is ready. Files listed: {files}.","sealNote":"evidence.sha256 is the SHA-256 of evidence.json. It shows that the pack was changed afterwards; it is not a signature and not a legal attestation.","verify":"To check it later, run {command} with the path of the pack.","refused":"The pack could not be created"}},"heatmap":{"heading":"Heat map","intro":"Colours the diagram from the engine’s history: how often each element ran, how long it took and how often it failed. Read only.","process":"Process","period":"Period","metric":"Colour by","periods":{"1h":"Last hour","24h":"Last 24 hours","7d":"Last 7 days","30d":"Last 30 days"},"metrics":{"duration":"95th percentile duration","count":"Visits","failure":"Failure rate"},"show":"Show heat map","reload":"Reload","hide":"Hide","loading":"Reading the history…","summary":"Steps read: {rows}. Elements coloured: {painted}. Period: {period}.","versions":"Versions of the process included: {count}.","truncated":"The history holds more than Penstock reads at once, so the map covers only part of it. Choose a shorter period.","empty":"No element ran in this period.","slowest":"Slowest elements","failing":"Most failing elements","slowDetail":"95th percentile {p95} · average {average} · visits {visits}","failDetail":"Failed {rate}% · incidents {incidents} · cancelled {canceled} · visits {visits}","element":{"title":"Visits: {visits}. Average: {average}. 95th percentile: {p95}. Incidents: {incidents}. Cancelled: {canceled}. Failure rate: {rate}%."},"none":"none","problem":{"badProcess":"The process id is empty, too long or holds a control character, so nothing was asked of the engine.","notDeployed":"The engine has no deployed process {process}."}},"incidentLoop":{"title":"Fix this incident end to end","intro":"Reproduces the incident, uses the fix from the editor, checks it with the scenario, sends only the changed file and retries the failed work. A rehearsal changes nothing; a real run asks before every change.","open":"Fix end to end…","rehearse":"Rehearse","run":"Run for real","aborted":"Stopped before this step.","rolledBack":"The file was put back as it was.","rollbackFailed":"The file could not be put back: {reason}","retried":"Retried {what}.","steps":{"reproduce":"Reproduce with the scenario","fix":"Apply the fix","verify":"Check the fix with the scenario","deploy":"Send only the changed file","retry":"Retry the failed work"},"states":{"pending":"Waiting","running":"Running","done":"Done","wouldDo":"Would do","skipped":"Skipped","failed":"Stopped","declined":"Declined"},"fix":{"noChange":"{file} has no changes compared with the saved file. Make the fix in the editor first, then run this again.","would":"Would use the fix in {file}.","applied":"Using the fix in {file}."},"verify":{"passes":"The scenario now ends without the incident.","fails":"The scenario still fails: {reason}"},"deploy":{"nothing":"The engine already has this version, so nothing was sent and nothing is retried.","would":"Would send {files} to {target}.","sent":"Sent {files} to {target}.","accept":"Send"},"retry":{"would":"Would retry {what}.","accept":"Retry"},"protected":{"title":"This connection is protected","text":"{name} is marked protected. Send the fix to it only if you mean to.","accept":"Send to the protected connection"},"confirm":{"fix":"Use the fix in {file}?","deploy":"{what} Send it?","retry":"{what} Retry it now?"},"result":{"done":"Done. The fix is on the engine and the failed work was retried.","rehearsed":"Rehearsal finished: every step would go through, and nothing was changed.","stopped":"Stopped at: {step}. Nothing after it was done."},"problem":{"noIncidentId":"The incident has no usable id, so nothing was retried.","noJob":"Could not find exactly one failed job for incident {incident}, so nothing was retried.","noRetryFor":"An incident of type {type} cannot be retried this way.","retryRefused":"The engine refused to retry {what} (status {status})."},"what":{"job":"job {id}","externalTask":"external task {id}","incident":"incident {id}"}},"replay":{"open":"Replay this instance","loading":"Reading the instance…","previous":"Previous step","next":"Next step","position":"Step {number} of {total}","truncated":"Only the first {limit} steps are shown.","steps":"Steps of the instance","states":{"COMPLETED":"Completed","ACTIVE":"Active","TERMINATED":"Cancelled","FAILED":"Failed"},"variablesThen":"Variables when the step started","variablesNow":"Variables the instance has now","currentNote":"The engine keeps only the latest value of each variable, so every step shows these.","cut":"The variables of this step are too large to show.","noVariables":"No variables.","variablesTable":"Variables at this step","changedHere":"changed here","incidents":"Incidents of the instance","whatIf":{"open":"What if from this token…","tooltip":"Start a new instance at this element with the variables edited","title":"What if from this token","intro":"Starts a new instance at {element} with the variables below, which you can edit. Nothing in the original instance changes.","secrets":"These variables look secret and are shown as <redacted>: {names}. Replace or remove them before you start.","latestVersion":"The new instance runs the latest deployed version of the process.","variables":"Variables (JSON)","variablesHint":"An object of names and values.","plan":"Will start an instance of {process} at {element} on {target}. Variables: {count}.","start":"Start instance","started":"Started instance {instance}."},"problem":{"badInstance":"The instance id is empty, too long or holds a control character, so nothing was asked of the engine.","noSteps":"The engine has no history of steps for instance {instance}.","variablesTooLarge":"The variables are larger than 256 KB.","tooManyVariables":"At most {limit} variables can be sent.","badVariableName":"A variable name is empty, too long, holds a control character or is __proto__.","redacted":"The variable {name} still holds <redacted>. Replace it with the real value or remove it.","badProcess":"The process id is empty, too long or holds a control character.","badElement":"{element} is not an element of this diagram that a token can start at."}},"refactor":{"kind":{"variable":"Process variable","message":"Message name","signal":"Signal name","error":"Error code","escalation":"Escalation code","job-type":"Job type","topic":"External task topic","decision":"Decision id","form":"Form key","process":"Process id (target of call activities)"},"reason":{"dynamicExpression":"an expression that reads variables in a way that cannot be followed","syntax":"an expression that does not parse, so its names cannot be told apart","binding":"a name bound again inside the expression, which hides the variable","filter":"a filter whose items may carry a field of the same name","encoded":"the name is written with character references that are not safe to rewrite","script":"a script, which is never rewritten","literal":"the name appears as plain text inside an expression","concatenation":"a name built by joining text, so it cannot be located","dynamicName":"variables read by a computed name in the code","boundByName":"a parameter bound by the variable name, which has to be renamed by hand","placeholder":"a placeholder in a template, which is not rewritten","escaped":"the name is written with escapes that are not safe to rewrite","tooLarge":"the file is too large to read safely","notText":"the file is not readable text","unreadable":"the file could not be read","tooManyFiles":"the project has more files than a rename reads","malformed":"the place did not read as expected, so it was left alone","symlink":"a link, which is never followed","outside":"the file is outside the project"},"blocker":{"empty":"a name is empty","same":"the new name is the same as the old one","unwritable":"the new name has characters that cannot be written safely","tooLong":"a name is longer than {detail} characters","expression":"the new name is an expression, not a name","badName":"{detail} is not a valid name for this kind","exists":"the new name is already used in {detail} places","nothing":"nothing uses the old name","unknownKind":"this kind of rename is not known","tooMany":"more than {detail} places would change","unreadable":"the project could not be read"},"extract":{"malformed":"the diagram is not well-formed","noEngine":"the diagram does not say whether it is for Camunda 7 or Camunda 8","noElements":"no element is selected","tooMany":"more than {detail} elements are selected","notFound":"the element {detail} is not in the diagram","badProcessId":"{detail} is not a valid process id","badName":"{detail} is not a valid name","processIdTaken":"a process with the id {detail} already exists","mixedScope":"the selected elements are not all in the same scope","unsupportedKind":"{detail} cannot be moved into a called process","subprocessKind":"only an embedded subprocess can be extracted whole ({detail})","compensation":"{detail} takes part in compensation","link":"{detail} is a link event, which cannot cross into another process","dataAssociation":"{detail} uses a data object or a data store","artifact":"{detail} ties an annotation or group to the selection","messageFlow":"{detail} is a message flow that would cross into the new process","ioMapping":"{detail} already has its own input or output mapping","entry":"the selection must have exactly one way in, and has {detail}","exit":"the selection must have exactly one way out, and has {detail}","exitCondition":"the way out ({detail}) has a condition or is a default flow","disconnected":"{detail} is not connected to the rest of the selection","boundary":"the boundary event {detail} is not selected together with its task, or the other way round","outsideReference":"{detail} refers to something outside the selection","syntax":"an expression cannot be read, so its variables cannot be mapped ({detail})","dynamicVariable":"variables are read by a computed name, so they cannot be mapped ({detail})","exitEvent":"the end event {detail} is typed, which cannot be left as the way out","invalidResult":"the result would not stay valid ({detail}), so nothing was changed","nameTaken":"the file {detail} already exists"},"mapping":{"tooLarge":"the mapping file is larger than 256 KB","tooMany":"the mapping has more than {detail} renames","badJson":"the mapping is not valid JSON with a list of renames","badLine":"line {line} must be kind,old,new","badKind":"line {line}: {detail} is not a kind of name","badEntry":"entry {line} needs a kind, a from and a to, all as text","empty":"the mapping has no renames"},"stop":{"tooLarge":"The project is too large to read safely ({detail} files).","changed":"{detail} changed after the preview, so nothing was written.","planChanged":"The project changed after the preview, so nothing was written. Preview again.","blocked":"The plan is blocked, so nothing was written.","refused":"{detail} places were refused. Acknowledge them to apply the rest and leave those as they are.","unsafe":"{detail} is outside the project or is a link, so nothing was written.","writeFailed":"A file could not be written and every file was put back: {detail}","dirty":"The git tree has uncommitted changes, so nothing was written. Commit or stash them first, or force it."},"text":{"request":"Rename {kind} {from} to {to}","blocker":"Step {step} cannot be applied: {reason}","edit":" {line}:{column} {where}: {before} -> {after}","refused":" left alone, {file}:{line}: {reason} ({where})","refusedBlocking":" refused, {file}:{line}: {reason} ({where})","more":" ... and {count} more","summary":"{edits} edits in {files} files, {refused} places left alone.","applied":"Applied: {edits} edits in {files} files, {refused} places left alone.","previewOnly":"Preview only, nothing was written. Add --apply to write it.","cannotApply":"Nothing can be applied until the problems above are resolved.","extractTo":"Extract into {created}, with the call activity {call} in its place","extractMoved":"Elements moved: {count}","extractIn":"Passed into the called process: {names}","extractOut":"Passed back: {names}","extractPreview":"Preview only, nothing was written. Add --apply to write it.","extractApplied":"Written: the new process file and the changed diagram.","everything":"all variables","nothing":"no variables"},"cli":{"uncRoot":"A network share (UNC) path cannot be the project root.","mappingMissing":"The mapping file {file} was not found.","mappingNotFile":"The mapping is not a regular file.","mappingOutside":"The mapping file is outside the project.","needsRename":"Name the kind, the current name and the new name: penstock refactor rename <kind> <old> <new>","unknownKind":"{kind} is not a kind of name. Use one of: {kinds}.","needsMapping":"Name a mapping file: penstock refactor bulk <mapping-file>","needsExtract":"Name the diagram, the element ids and the new process id: penstock refactor extract <file.bpmn> <ids> <process-id>","unknownAction":"Unknown refactor action. Use one of: {actions}."},"usage":{"rename":"rename a name across the project, with a preview first","bulk":"apply the renames of a mapping file in order (Pro)","extract":"move a subprocess or fragment into its own process and call it (Pro)"},"mcp":{"needsPlanId":"{tool}: applying needs the planId from a preview of the same request."},"dialog":{"title":"Refactor","intro":"Rename a name across the diagrams, decisions, forms, templates, configuration, tests and code, or move part of a diagram into its own process. Nothing is written until you apply.","mode":"What to do","modeRename":"Rename one name","modeBulk":"Rename from a list (Pro)","modeExtract":"Extract to a call activity (Pro)","kind":"Kind of name","from":"Current name","to":"New name","mapping":"Renames","mappingHint":"One per line as kind,old,new, or JSON with a renames list. They are applied in order.","file":"Diagram","fileHint":"The project path of the BPMN file, such as processes/order.bpmn.","elements":"Elements","elementsHint":"The id of one subprocess, or the ids of the elements to move, separated by commas.","processId":"New process id","name":"Name of the new process","preview":"Preview","apply":"Apply","change":"Change","acknowledge":"Apply although the places listed as refused stay as they are","force":"Apply although the git tree has uncommitted changes","running":"Working…","summary":"Edits: {edits}. Files: {files}. Left alone: {refused}.","editsHeading":"Will change","refusedHeading":"Left alone","blockedHeading":"Cannot apply","line":"line {line}","applied":"Done. Edits: {edits}. Files: {files}.","extractApplied":"Created {created} and replaced the selection with a call activity.","extractPlan":"New file {created}. Elements moved: {count}. Passed in: {inputs}. Passed back: {outputs}.","pro":"Bulk renames and Extract to Call Activity are part of Penstock Pro. A single rename is free, with no time limit.","failed":"The refactoring could not run: {reason}"}},"lsp":{"hoverWhy":"Why it matters","hoverFix":"How to fix it","hoverDocs":"Rule documentation","elementType":"Type","elementId":"Id","elementName":"Name","calledProcess":"Called process","calledDecision":"Called decision","form":"Form","formKey":"Key","jobType":"Job type","hitPolicy":"Hit policy","variables":"Variables in scope","openDocs":"Open the documentation of {rule}","fixExecutable":"Mark the process as executable","fixTimeToLive":"Set the history time to live to 30 days (P30D)","fixRemoveLabel":"Delete the label","capped":"Penstock shows the first {count} findings of this file. Fix these and check again to see the rest.","tooLarge":"This file is larger than {limit} MB, so Penstock does not read it in the editor.","outsideWorkspace":"This file is outside the folders the editor opened, so Penstock does not check it. Open its project folder.","checkStopped":"The check stopped before it finished. Save the file to try again.","related":"Also involved: {name}","xmlMalformed":"The XML is not well formed here.","xmlRefused":"Penstock does not read this XML: it has a document type declaration, is nested more than 200 levels deep or has more than 400000 elements.","jsonInvalid":"The JSON is not valid here.","stdioOnly":"penstock lsp speaks over stdin and stdout only, so {option} is not supported. Start it as: penstock lsp --stdio","terminalHint":"penstock lsp is started by an editor and talks to it over stdin and stdout. Put \\"penstock lsp --stdio\\" in the language server settings of the editor (see penstock lsp --help)."}}`),libs:{Configuration:`Configuration`,"Hit policy:":`Hit policy`,"Remove list item {index}":`Remove list item {index}`,"Section contains a warning":`Section contains a warning`}},s={en:o},c={ru:()=>e(()=>import(`./ru-B6Vc-zq8.js`),[],import.meta.url),de:()=>e(()=>import(`./de-BTDorMeU.js`),[],import.meta.url),zh:()=>e(()=>import(`./zh-i-4nbAHI.js`),[],import.meta.url),ja:()=>e(()=>import(`./ja-DVqdcuHl.js`),[],import.meta.url),ko:()=>e(()=>import(`./ko-CRptKWR-.js`),[],import.meta.url),es:()=>e(()=>import(`./es-CR6ISPVl.js`),[],import.meta.url),"pt-BR":()=>e(()=>import(`./pt-BR-BfrprD8Z.js`),[],import.meta.url),fr:()=>e(()=>import(`./fr-DwvAkT7i.js`),[],import.meta.url),pl:()=>e(()=>import(`./pl-Bj0mC7Bu.js`),[],import.meta.url),it:()=>e(()=>import(`./it-DyGmdw18.js`),[],import.meta.url),nl:()=>e(()=>import(`./nl-CEt8h9GJ.js`),[],import.meta.url),tr:()=>e(()=>import(`./tr-C9yQyV09.js`),[],import.meta.url),uk:()=>e(()=>import(`./uk-DN_g1J3t.js`),[],import.meta.url),cs:()=>e(()=>import(`./cs-Dq6nyTaJ.js`),[],import.meta.url),id:()=>e(()=>import(`./id-rbO9ARH7.js`),[],import.meta.url),vi:()=>e(()=>import(`./vi-BPsdioG-.js`),[],import.meta.url),"zh-TW":()=>e(()=>import(`./zh-TW-9dUNIGWo.js`),[],import.meta.url)};function catalogFor(e){return s[e]??s.en??o}async function loadCatalog(e){e===`en`||s[e]||(s[e]=(await c[e]()).default)}var l=new Map;function categories(e){let n=l.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(`en`)}l.set(e,n)}return n}function at(e,n){let r=e;for(let e of n.split(`.`)){if(typeof r!=`object`||!r)return;r=r[e]}return r}function forms(e,n,r,i){let a=at(e,n);if(r===void 0)return typeof a==`string`?a:void 0;if(typeof a==`object`&&a){let e=a[categories(i).select(r)];if(typeof e==`string`)return e;let n=a.other;return typeof n==`string`?n:void 0}return typeof a==`string`?a:void 0}function createTranslator(e,n=s){let r=n[e]??n.en,i=n.en;return(n,a)=>{let o=typeof a?.count==`number`?a.count:void 0,s=forms(r,n,o,e);if(s!==void 0)return interpolate(s,a);let c=forms(i,n,o,`en`);return c===void 0?n:interpolate(c,a)}}var u=`en`;function locale(){return u}function setLocale(e){u=e}function t(e,n){return createTranslator(u)(e,n)}export{catalogFor as a,browserLocale as c,t as i,languageOf as l,locale as n,loadCatalog as o,setLocale as r,interpolate as s,createTranslator as t,resolveLocale as u};