@orkastery/cli 0.5.6 → 0.6.0

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 (385) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +37 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +118 -4
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/atualizar-branch.js +245 -0
  105. package/dist/auditoria.js +13 -11
  106. package/dist/auditrun.js +51 -46
  107. package/dist/autorizacao-duravel.js +327 -0
  108. package/dist/board.js +94 -40
  109. package/dist/branch-de-estado.js +16 -8
  110. package/dist/busca-semantica.js +7 -5
  111. package/dist/catalogo.js +2 -1
  112. package/dist/changelog-reconciliacao.js +290 -0
  113. package/dist/check-agil.js +500 -0
  114. package/dist/check-modo.js +41 -0
  115. package/dist/check-paralelo.js +183 -0
  116. package/dist/ci.js +248 -45
  117. package/dist/ciclos.js +8 -6
  118. package/dist/claim-lint.js +12 -8
  119. package/dist/claims-conferir.js +47 -39
  120. package/dist/claims.js +10 -9
  121. package/dist/company-brain-client.js +10 -3
  122. package/dist/company-brain-migration.js +11 -5
  123. package/dist/conducao-batida.js +759 -0
  124. package/dist/conducao-sentinela.js +25 -8
  125. package/dist/conducao.js +84 -29
  126. package/dist/conhecimento-consulta.js +270 -0
  127. package/dist/conhecimento.js +111 -87
  128. package/dist/conta-esgotada.js +127 -0
  129. package/dist/dado-privado.js +816 -0
  130. package/dist/decisao-autonoma.js +5 -4
  131. package/dist/demo.js +14 -12
  132. package/dist/dependencias-da-worktree.js +25 -0
  133. package/dist/divida.js +38 -36
  134. package/dist/docs.js +81 -74
  135. package/dist/doctor-forja.js +345 -0
  136. package/dist/doctor-pulse-cron.js +113 -1
  137. package/dist/doctor.js +164 -6
  138. package/dist/dsn-da-memoria.js +417 -0
  139. package/dist/entrega-por-mod.js +503 -0
  140. package/dist/entrega-pr.js +143 -43
  141. package/dist/esgotamentos.js +13 -11
  142. package/dist/estado-thread.js +21 -18
  143. package/dist/evalrunner.js +35 -32
  144. package/dist/fabrica-batida.js +34 -21
  145. package/dist/fabrica-estado.js +13 -10
  146. package/dist/fix.js +21 -19
  147. package/dist/forja/adaptador.js +6 -0
  148. package/dist/forja/ambiente-de-ci.js +27 -0
  149. package/dist/forja/api.js +256 -0
  150. package/dist/forja/cache.js +89 -0
  151. package/dist/forja/cli.js +60 -0
  152. package/dist/forja/contrato.js +9 -0
  153. package/dist/forja/endereco.js +43 -0
  154. package/dist/forja/estado.js +22 -0
  155. package/dist/forja/executor.js +73 -0
  156. package/dist/forja/github/ci.js +95 -0
  157. package/dist/forja/github/dono-da-rede.js +18 -0
  158. package/dist/forja/github/metadados.js +15 -0
  159. package/dist/forja/github/pedidos.js +200 -0
  160. package/dist/forja/gitlab/ci.js +141 -0
  161. package/dist/forja/gitlab/consultas.js +59 -0
  162. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  163. package/dist/forja/gitlab/metadados.js +15 -0
  164. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  165. package/dist/forja/gitlab/pedidos.js +141 -0
  166. package/dist/forja/produtor.js +32 -0
  167. package/dist/forja/registro.js +31 -0
  168. package/dist/forja/resolver.js +121 -0
  169. package/dist/forja/texto.js +13 -0
  170. package/dist/forja/versao.js +71 -0
  171. package/dist/forja.js +123 -80
  172. package/dist/handoff.js +23 -13
  173. package/dist/hitl-contract.js +46 -43
  174. package/dist/hitl-curto.js +37 -25
  175. package/dist/hitl-gates.js +13 -11
  176. package/dist/hitl-local-receipt.js +51 -0
  177. package/dist/hitl-local.js +11 -2
  178. package/dist/hitl-lock.js +5 -11
  179. package/dist/hitl-public-receipt.js +11 -0
  180. package/dist/hitl-resumo.js +44 -1
  181. package/dist/hitl-sessions.js +62 -9
  182. package/dist/hitl-texto-livre.js +7 -4
  183. package/dist/hitl.js +34 -31
  184. package/dist/horario.js +16 -0
  185. package/dist/hosts.js +104 -134
  186. package/dist/index.js +848 -548
  187. package/dist/indice-vetorial.js +14 -12
  188. package/dist/init.js +11 -2
  189. package/dist/integracoes-locais.js +2 -0
  190. package/dist/intelligence-graph-cli.js +123 -69
  191. package/dist/intelligence-graph-query.js +37 -22
  192. package/dist/leases.js +19 -18
  193. package/dist/ledger-stats.js +17 -16
  194. package/dist/ledger.js +31 -1
  195. package/dist/licoes.js +12 -11
  196. package/dist/locale-accounts.js +220 -0
  197. package/dist/locale-adapter.js +291 -0
  198. package/dist/locale-ajuda.js +76 -4
  199. package/dist/locale-audit.js +199 -0
  200. package/dist/locale-claims.js +213 -0
  201. package/dist/locale-conducao.js +138 -0
  202. package/dist/locale-conhecimento.js +181 -0
  203. package/dist/locale-decisao.js +205 -0
  204. package/dist/locale-docs.js +230 -0
  205. package/dist/locale-estado.js +101 -0
  206. package/dist/locale-forja.js +290 -0
  207. package/dist/locale-gerados.js +5 -0
  208. package/dist/locale-grafo.js +129 -0
  209. package/dist/locale-master.js +83 -0
  210. package/dist/locale-network.js +524 -0
  211. package/dist/locale-operacao-restante.js +931 -0
  212. package/dist/locale-projetos.js +100 -0
  213. package/dist/locale-prompts.js +194 -0
  214. package/dist/locale-pulse.js +140 -2
  215. package/dist/locale-reservas.js +87 -0
  216. package/dist/locale-retry.js +145 -6
  217. package/dist/locale-security-scan.js +69 -0
  218. package/dist/locale-setup.js +192 -0
  219. package/dist/locale-ship.js +169 -66
  220. package/dist/locale-thread.js +149 -5
  221. package/dist/locale-verify.js +80 -4
  222. package/dist/locale-worktree.js +246 -0
  223. package/dist/locale.js +553 -9
  224. package/dist/maestro-runtime.js +22 -3
  225. package/dist/manifest.js +287 -11
  226. package/dist/maquina-ociosa.js +211 -0
  227. package/dist/maquina.js +10 -5
  228. package/dist/master-nota-local.js +200 -0
  229. package/dist/master-nota.js +10 -2
  230. package/dist/master.js +118 -41
  231. package/dist/mcp-conhecimento.js +52 -0
  232. package/dist/mcp-experiencia.js +26 -5
  233. package/dist/mcp-install.js +73 -8
  234. package/dist/mcp-noctum.js +101 -0
  235. package/dist/mcp-server.js +82 -14
  236. package/dist/mcp-ship-transporte.js +977 -0
  237. package/dist/mcp-ship.js +68 -24
  238. package/dist/mcp-transportes.js +17 -0
  239. package/dist/memoria.js +63 -58
  240. package/dist/modos-migracao.js +8 -6
  241. package/dist/modos.js +17 -18
  242. package/dist/network-roadmap.js +85 -49
  243. package/dist/noctum-aceite.js +789 -0
  244. package/dist/noctum-arco.js +540 -33
  245. package/dist/noctum-capacidade.js +3 -3
  246. package/dist/noctum-changelog.js +399 -0
  247. package/dist/noctum-cli.js +482 -0
  248. package/dist/noctum-coordenacao.js +1225 -0
  249. package/dist/noctum-entrega.js +1169 -0
  250. package/dist/noctum-envelope.js +252 -16
  251. package/dist/noctum-execucao.js +95 -23
  252. package/dist/noctum-fechamento.js +405 -0
  253. package/dist/noctum-fila.js +43 -9
  254. package/dist/noctum-guarda.js +256 -0
  255. package/dist/noctum-integracao.js +507 -0
  256. package/dist/noctum-maquinas.js +383 -0
  257. package/dist/noctum-medicao.js +450 -0
  258. package/dist/noctum-modo.js +362 -0
  259. package/dist/noctum-pergunta-canal.js +96 -0
  260. package/dist/noctum-pergunta.js +115 -0
  261. package/dist/noctum-provas.js +838 -0
  262. package/dist/noctum-reconciliacao.js +591 -0
  263. package/dist/noctum-registro.js +215 -0
  264. package/dist/noctum-relatorio.js +827 -0
  265. package/dist/noctum-resposta.js +207 -0
  266. package/dist/noctum-sessoes-em-voo.js +93 -0
  267. package/dist/noctum-supervisao.js +649 -0
  268. package/dist/noctum-terminal.js +459 -0
  269. package/dist/noctum-transporte.js +655 -0
  270. package/dist/noctum-vigia.js +639 -0
  271. package/dist/ocupacao.js +3 -1
  272. package/dist/onboarding.js +16 -5
  273. package/dist/orkmind.js +39 -23
  274. package/dist/orquestracao.js +31 -35
  275. package/dist/parado-no-condutor.js +146 -124
  276. package/dist/phase.js +53 -27
  277. package/dist/policies.js +33 -0
  278. package/dist/postura-local.js +4 -3
  279. package/dist/procedencia.js +9 -14
  280. package/dist/projeto-alvo.js +59 -20
  281. package/dist/prompts.js +136 -42
  282. package/dist/prova-minima.js +5 -6
  283. package/dist/pulse-cadencia.js +5 -4
  284. package/dist/pulse-consentimento.js +53 -1
  285. package/dist/pulse-delivery.js +143 -27
  286. package/dist/pulse-resposta.js +368 -4
  287. package/dist/pulse.js +136 -3
  288. package/dist/ratelimit.js +12 -4
  289. package/dist/recall.js +14 -13
  290. package/dist/rede-adesao.js +13 -8
  291. package/dist/rede-forja.js +108 -24
  292. package/dist/rede-status.js +63 -45
  293. package/dist/rede.js +86 -46
  294. package/dist/retomada-checkpoint.js +101 -0
  295. package/dist/retry.js +228 -73
  296. package/dist/roadmap-reservas.js +32 -32
  297. package/dist/runtime-ambiente.js +5 -0
  298. package/dist/runtime-context.js +117 -43
  299. package/dist/runtime-escada.js +423 -0
  300. package/dist/runtime-profiles.js +103 -46
  301. package/dist/saida-segura.js +3 -2
  302. package/dist/security-scan/agil.js +355 -0
  303. package/dist/security-scan/cli.js +76 -0
  304. package/dist/security-scan/compare.js +149 -0
  305. package/dist/security-scan/config.js +93 -0
  306. package/dist/security-scan/detect.js +97 -0
  307. package/dist/security-scan/executor.js +188 -0
  308. package/dist/security-scan/guard.js +180 -0
  309. package/dist/security-scan/imagem-de-lint.js +96 -0
  310. package/dist/security-scan/normalize/actionlint.js +12 -0
  311. package/dist/security-scan/normalize/eslint.js +12 -0
  312. package/dist/security-scan/normalize/gitleaks.js +13 -0
  313. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  314. package/dist/security-scan/normalize/govulncheck.js +36 -0
  315. package/dist/security-scan/normalize/index.js +25 -0
  316. package/dist/security-scan/normalize/npm-audit.js +30 -0
  317. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  318. package/dist/security-scan/normalize/oxlint.js +51 -0
  319. package/dist/security-scan/normalize/pip-audit.js +16 -0
  320. package/dist/security-scan/normalize/ruff.js +12 -0
  321. package/dist/security-scan/normalize/semgrep.js +20 -0
  322. package/dist/security-scan/normalize/trivy.js +33 -0
  323. package/dist/security-scan/normalize/util.js +204 -0
  324. package/dist/security-scan/normalize/zizmor.js +19 -0
  325. package/dist/security-scan/report.js +156 -0
  326. package/dist/security-scan/run.js +448 -0
  327. package/dist/security-scan/tools.js +62 -0
  328. package/dist/security-scan/trabalhador.js +74 -0
  329. package/dist/security-scan/types.js +15 -0
  330. package/dist/session-events.js +19 -2
  331. package/dist/session-watcher-claude.js +74 -19
  332. package/dist/session-watcher.js +156 -10
  333. package/dist/sessoes-contas.js +9 -0
  334. package/dist/sessoes-inventario.js +1 -1
  335. package/dist/sessoes.js +25 -23
  336. package/dist/setup.js +59 -58
  337. package/dist/ship-publicar.js +263 -92
  338. package/dist/ship.js +160 -17
  339. package/dist/superficie.js +14 -11
  340. package/dist/thread-close.js +9 -9
  341. package/dist/thread.js +121 -18
  342. package/dist/tokens.js +15 -11
  343. package/dist/trabalho-thread.js +297 -0
  344. package/dist/transporte-do-canal.js +189 -0
  345. package/dist/types.js +12 -1
  346. package/dist/util.js +5 -2
  347. package/dist/varredura-acoes.js +507 -0
  348. package/dist/verify.js +472 -29
  349. package/dist/worktree-local.js +12 -10
  350. package/dist/worktree.js +81 -85
  351. package/eval/casos/check-quality.json +77 -0
  352. package/eval/casos/security-auditor.json +148 -0
  353. package/eval/casos/security-remediation.json +161 -0
  354. package/eval/fixtures/security-scan/README.md +8 -0
  355. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  356. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  357. package/eval/fixtures/security-scan/go/README.md +4 -0
  358. package/eval/fixtures/security-scan/go/config.go +4 -0
  359. package/eval/fixtures/security-scan/go/go.mod +5 -0
  360. package/eval/fixtures/security-scan/go/go.sum +2 -0
  361. package/eval/fixtures/security-scan/go/main.go +31 -0
  362. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  363. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  364. package/eval/fixtures/security-scan/js/README.md +4 -0
  365. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  366. package/eval/fixtures/security-scan/js/package.json +10 -0
  367. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  368. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  369. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  370. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  371. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  372. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  373. package/eval/fixtures/security-scan/python/README.md +4 -0
  374. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  375. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  376. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  377. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  378. package/package.json +9 -4
  379. package/references/security-checklist.md +3 -3
  380. package/skills/README.md +1 -0
  381. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  382. package/skills/phases/check-quality/SKILL.md +16 -0
  383. package/skills/phases/go-implementation/SKILL.md +6 -0
  384. package/skills/phases/security-remediation/SKILL.md +70 -0
  385. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -10,6 +10,8 @@
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SHIP_EN = exports.SHIP_PT_BR = void 0;
13
+ /** O pedido de merge pelo numero, como cada forja o escreve: `PR #n` no GitHub, `MR !n` no GitLab. */
14
+ const rotuloDoPedido = (n, gitlab) => (gitlab ? `MR !${n}` : `PR #${n}`);
13
15
  exports.SHIP_PT_BR = {
14
16
  uso: 'uso: ork ship <thread-id> --para <branch> [--de <branch>] [--dry-run]',
15
17
  // textoDoShip
@@ -58,6 +60,10 @@ exports.SHIP_PT_BR = {
58
60
  contratoPublicoCorrecao: 'refaca a mudanca numa thread #Classic, #Maestro ou #Auto',
59
61
  ciReprovou: (detalhe, sha, contexto) => `${detalhe} (commit ${sha}, contexto ${contexto})`,
60
62
  ciReprovouCorrecao: (contexto) => `publique a branch, aguarde o check ${contexto} verde no GitHub e repita o SHIP`,
63
+ scanNaoVarrido: (categorias, sha) => `o security scan nao varreu estas categorias do laco no commit ${sha}: ${categorias} (ferramenta indisponivel, com falha ou sem relatorio)`,
64
+ passoAutorizariaSemScan: (quem, categorias, sha) => `ensaio: o ship real gravaria ship_unscanned_authorized por ${quem} para ${categorias} no commit ${sha}`,
65
+ allowUnscannedSemValor: 'erro: --allow-unscanned pede quem autoriza: ork ship <thread> --para <branch> --allow-unscanned "<quem>"',
66
+ scanNaoVarridoCorrecao: (thread) => `rode ork security-scan com Docker ou os binarios nativos e repita o SHIP; para entregar sem varredura, autorize: ork ship ${thread} --para <branch> --allow-unscanned "<quem>"`,
61
67
  arvoreDona: (dona, para, suja) => `${dona} (arvore que tem ${para} em check-out; ${suja ? 'SUJA, o ship reprovaria com tree.blocked' : 'limpa'})`,
62
68
  arvoreTemporaria: (dir, para) => `worktree temporaria em ${dir} (ninguem tem ${para} em check-out)`,
63
69
  arvoreDeMerge: (arvore) => `arvore de merge: ${arvore}`,
@@ -85,17 +91,31 @@ exports.SHIP_PT_BR = {
85
91
  semPrimeiroPaiCorrecao: 'confira o repositorio: o ship_done precisa do merge que entregou a thread',
86
92
  passoJaIncorporado: (de, para, sha) => `(nada a mergear: ${de} ja e ancestral de ${para}, incorporado em ${sha})`,
87
93
  pushFalhou: (remoto, para, erro) => `push para ${remoto}/${para} falhou: ${erro}`,
94
+ configDoRemotoInvalida: (chave) => `ship.config-do-remoto.invalida: a config do remoto aceita só pares -c chave=valor das chaves do transporte fixado (recusada: ${chave || 'forma inválida'}); nada foi passado ao git`,
88
95
  pushFalhouCorrecao: 'resolva o acesso ao remoto e rode o ship de novo (o merge local ja aconteceu)',
96
+ pushBaseProtegida: (remoto, para, erro) => `a proteção de ${remoto}/${para} recusou o push direto na base (entrega.base-protegida): ${erro}`,
97
+ pushBaseProtegidaCorrecao: (thread) => `entregue por PR/MR: ork ship publicar ${thread} (em #Auto e #Maestro) ou o pedido aberto na forja; depois do merge, ` +
98
+ `ork ship registrar-pr ${thread}. O merge local na base não chegou ao remoto`,
89
99
  pushSemProva: (sha, ponta) => `ls-remote devolveu ${sha ?? '(nada)'} e o destino local esta em ${ponta}: o push nao ficou provado`,
90
100
  pushSemProvaCorrecao: 'rode o ship de novo e confira o remoto',
91
101
  // ci.ts: o detalhe da consulta ao CI (vai ao ledger dentro da evidencia do ship)
92
102
  ciNaoExigidoDetalhe: 'gate de CI não exigido pelo manifesto',
93
- ciRemotoNaoGithub: (remoto) => `remoto ${remoto} não é um repositório GitHub reconhecível`,
103
+ ciRemotoNaoGithub: (remoto) => `remoto ${remoto} não é um repositório GitHub reconhecível, nem GitLab`,
104
+ ciHostSemLogin: (host) => `o gh não está autenticado em ${host}: a CI desse host não foi consultada`,
105
+ ciForjaNaoResolvida: (remoto, motivo) => `a forja do remoto ${remoto} não foi resolvida: ${motivo}`,
94
106
  ciConsultaFalhou: 'consulta ao GitHub falhou',
95
107
  ciRespostaInvalida: 'GitHub devolveu uma resposta de checks inválida',
108
+ ciIncompleto: (contexto) => `check ${contexto}: a lista de check-runs ou de commit statuses do commit veio incompleta e o gate não decide sem ela inteira`,
109
+ ciStatusSemProdutorConfiavel: (contexto) => `${contexto}: só commit status de conta fora de ci.produtor; status verde só aprova de produtor aceito`,
110
+ ciSemProdutorAceito: (contexto, produtores, aceitos) => `${contexto}: verde só de produtor fora de ci.produtor (${produtores}); aceitos: ${aceitos}`,
111
+ ciProdutores: (contexto, produtores) => `check ${contexto} com mais de um produtor: ${produtores}`,
96
112
  ciSemCheck: (contexto) => `check ${contexto} não encontrado no commit`,
97
113
  ciVerde: 'CHECK independente verde no GitHub',
114
+ ciBloqueado: (contexto, conclusao) => `check ${contexto}: bloqueado (${conclusao})`,
98
115
  ciEstado: (contexto, status, conclusao) => `check ${contexto}: ${status}/${conclusao || 'sem conclusão'}`,
116
+ ciVerdeNoGitlab: 'CHECK independente verde no GitLab',
117
+ ciLeituraFalhou: (contexto, motivo) => `check ${contexto}: a CI não foi lida: ${motivo}`,
118
+ ciMescladoSemVinculo: (contexto, sha) => `ci.merged-results-sem-vinculo: o ${contexto} rodou só em pipeline de resultado mesclado sem vínculo provado com o head ${sha}; o gate não aprova`,
99
119
  // ork ship registrar-pr
100
120
  usoRegistrarPr: 'uso: ork ship registrar-pr <thread-id> [--repo <dono/nome> --pr <n>] | --todas [--remoto R] [--json] [--dry-run]',
101
121
  ensaio: 'Ensaio (--dry-run): nada foi gravado.',
@@ -103,7 +123,7 @@ exports.SHIP_PT_BR = {
103
123
  linhaDoRegistro: (thread, acao, motivo) => ` ${thread.padEnd(20)} ${acao.padEnd(13)} ${motivo}`,
104
124
  /** A acao e dado do `--json`; o texto so a traduz na impressao. */
105
125
  acoes: { 'registrou': 'registrou', 'registraria': 'registraria', 'ja-registrada': 'ja-registrada', 'sem-merge': 'sem-merge',
106
- 'recusada': 'recusada' },
126
+ 'recusada': 'recusada', 'pulada': 'pulada' },
107
127
  avisoDeDocs: (n) => `Aviso: ${n} pagina(s) do roadmap com estado.codigo fora de "Mesclado" depois do merge; ` +
108
128
  'o push da base reprova em docs.paridade.merge:',
109
129
  docPendente: (id, arquivo, merge, thread, codigo) => ` ${id} (${arquivo}): merge ${merge} de ship(${thread}), estado.codigo "${codigo || 'vazio'}"`,
@@ -113,6 +133,9 @@ exports.SHIP_PT_BR = {
113
133
  // entrega-pr.ts: o motivo de cada registro (sai no --json)
114
134
  prThreadFechada: 'thread ja fechada',
115
135
  prSemMerge: (thread, remoto, base) => `nenhum merge ship(${thread}) em ${remoto}/${base}`,
136
+ prSemLeitura: (remoto, base) => `o git fetch de ${remoto}/${base} falhou: sem leitura do remoto nao ha como achar o merge`,
137
+ prSemVinculo: (thread, sha) => `o merge ${sha} de ship(${thread}) tem um pai so (squash ou rebase) e nao liga a base ao head verificado; entregue por merge commit`,
138
+ prSemHead: (n, repo, forja = 'GitHub') => `o ${rotuloDoPedido(n, forja === 'GitLab')} de ${repo} esta mesclado, mas o ${forja} nao informou o head`,
116
139
  prJaTemShipDone: 'esta entrega ja tem ship_done',
117
140
  prForaDaPonta: (merge, remoto, base) => `o merge ${merge} nao esta na ponta de ${remoto}/${base}`,
118
141
  prSemCiVerde: (detalhe) => `sem CI verde no head do PR: ${detalhe}`,
@@ -120,15 +143,40 @@ exports.SHIP_PT_BR = {
120
143
  prRegistrou: (merge) => `ship_done pelo merge ${merge} do PR`,
121
144
  prRepoNaoDeclarado: (repo) => `o repositorio ${repo} nao esta declarado em ci.external_repositories do orkastery.yaml`,
122
145
  prNumeroInvalido: (recebido) => `--pr precisa ser o numero do PR, recebido ${recebido}`,
123
- prExternoJaTem: (n, repo) => `o PR #${n} de ${repo} ja tem ship_done`,
124
- prConsultaFalhou: (n, repo) => `a consulta do PR #${n} de ${repo} ao GitHub falhou`,
125
- prNaoMesclado: (n, repo) => `o PR #${n} de ${repo} nao esta mesclado`,
126
- prNaoCitaThread: (n, repo, thread) => `o PR #${n} de ${repo} nao cita a thread ${thread} no titulo, no corpo nem na branch`,
127
- prRepoFalhou: (repo) => `a consulta de ${repo} ao GitHub falhou`,
128
- prOutraBase: (n, base, repo, padrao) => `o PR #${n} entrou em ${base}, e a branch padrao de ${repo} e ${padrao ?? 'desconhecida'}`,
146
+ prExternoJaTem: (n, repo, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} de ${repo} ja tem ship_done`,
147
+ prConsultaFalhou: (n, repo, forja = 'GitHub') => `a consulta do ${rotuloDoPedido(n, forja === 'GitLab')} de ${repo} ao ${forja} falhou`,
148
+ prNaoMesclado: (n, repo, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} de ${repo} nao esta mesclado`,
149
+ prNaoCitaThread: (n, repo, thread, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} de ${repo} nao cita a thread ${thread} no titulo, no corpo nem na branch`,
150
+ prRepoFalhou: (repo, forja = 'GitHub') => `a consulta de ${repo} ao ${forja} falhou`,
151
+ prOutraBase: (n, base, repo, padrao, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} entrou em ${base}, e a branch padrao de ${repo} e ${padrao ?? 'desconhecida'}`,
129
152
  prExternoForaDaPonta: (merge, repo, base) => `o merge ${merge} nao esta na ponta de ${repo}:${base}`,
130
- prExternoRegistraria: (merge, n, repo) => `ensaio: registraria ship_done pelo merge ${merge} do PR #${n} de ${repo} (nada gravado)`,
131
- prExternoRegistrou: (merge, n, repo) => `ship_done pelo merge ${merge} do PR #${n} de ${repo}`,
153
+ prForjaDoExterno: (repo, motivo) => `a forja de ${repo} não foi resolvida: ${motivo}`,
154
+ prForjaDoProjetoNaoResolvida: (repo, remoto, motivo) => `a forja do remoto ${remoto} não foi resolvida (${motivo}), e ${repo} não é consultado em outro host; declare forja.tipo no orkastery.yaml ou faça login na CLI da forja nesse host`,
155
+ prRepoComSubgrupoNoGithub: (repo) => `${repo} tem subgrupos, e um repositorio do GitHub e so dono/nome; num projeto do GitLab, o remoto ou forja.tipo: gitlab no orkastery.yaml diz a forja`,
156
+ prExternoRegistraria: (merge, n, repo, gitlab = false) => `ensaio: registraria ship_done pelo merge ${merge} do ${rotuloDoPedido(n, gitlab)} de ${repo} (nada gravado)`,
157
+ prExternoRegistrou: (merge, n, repo, gitlab = false) => `ship_done pelo merge ${merge} do ${rotuloDoPedido(n, gitlab)} de ${repo}`,
158
+ // RM-058, integração (T1.1 e D3 da ork-rm058integra): a guarda das threads do arco #Noctum nos caminhos de entrega de fora
159
+ // do arco (`noctum-guarda.ts`). O motivo tipado abre o texto, igual nas duas línguas.
160
+ guarda: {
161
+ situacoes: { 'proposto': 'proposto', 'agendado': 'agendado', 'vigente': 'vigente', 'expirado': 'expirado', 'revogado': 'revogado',
162
+ 'encerrado': 'encerrado' },
163
+ origens: { 'envelope': 'pela lista do envelope', 'proposta': 'pela proposta que espera o dono', 'despacho': 'pelo log de despachos do arco',
164
+ 'correlacao': 'pelo último despacho da thread' },
165
+ doArco: (thread, arco, situacao, origem) => `noctum.guarda.thread-do-arco: a thread ${thread} é trabalho do arco ${arco} (${situacao}, ${origem})`,
166
+ doArcoCorrecao: (arco) => `a entrega desta thread é do passo da entrega do arco ${arco}: o SHIP e o MASTER dela são do arco (ork noctum status ${arco})`,
167
+ arcoIlegivel: (thread, arco, motivo) => `noctum.guarda.arco-ilegivel: o último despacho da thread ${thread} foi do arco ${arco}, e o arco não se lê (${motivo})`,
168
+ arcoIlegivelCorrecao: (arco) => `inspecione o arco antes de entregar a thread por fora dele (ork noctum status ${arco})`,
169
+ retencao: (thread, arco, situacao) => `noctum.guarda.thread-do-arco: o arco ${arco} (${situacao}) despachou a thread ${thread} por último; a batida e a Sentinela ` +
170
+ 'não a despacham, não a retomam nem a mesclam até um despacho fora do arco ou um arco novo que a liste',
171
+ // A2 do CHECK: o arco terminou, e a sessão que ele despachou ainda conduz a thread.
172
+ sessaoDoArco: (thread, arco, situacao, sessao) => `noctum.guarda.thread-do-arco: o arco ${arco} está ${situacao}, e a sessão ${sessao} que ele despachou ainda conduz a thread ${thread}: ` +
173
+ 'ela não entrega fora do arco',
174
+ sessaoDoArcoCorrecao: (arco) => `espere a parada que o fechamento do arco pede, ou pare a sessão; sem sessão do arco em voo, a thread se entrega à mão (ork noctum status ${arco})`,
175
+ // M3 do CHECK 3: a reserva pendente sem o id da sessão; não há sessão a parar, e quem a resolve é o vigia.
176
+ reservaDoArco: (thread, arco, situacao, seq) => `noctum.guarda.thread-do-arco: o arco ${arco} está ${situacao}, e a reserva ${seq} que ele fez para a thread ${thread} pode ter aberto ` +
177
+ 'uma sessão sem id: ela não entrega fora do arco',
178
+ reservaDoArcoCorrecao: (arco) => `espere o vigia reconciliar a reserva (ele a conclui com a sessão ou a devolve); sem sessão do arco em voo, a thread se entrega à mão (ork noctum status ${arco})`,
179
+ },
132
180
  // RM-059 (F7, T7.1): `ork ship publicar` e `ork ship pista`. O detalhe, a correcao e o texto das etapas vao ao
133
181
  // `--json` e ao ledger em pt-BR; a impressao os remonta no locale do comando.
134
182
  publicar: {
@@ -141,7 +189,7 @@ exports.SHIP_PT_BR = {
141
189
  linhaRemoto: (remoto, antes, depois) => ` remoto ${remoto}: ${depois} (antes: ${antes})`,
142
190
  linhaPushProvado: ' push PROVADO pelo ls-remote (mesmo sha do HEAD)',
143
191
  linhaPushSemProva: ' push sem prova',
144
- linhaPr: (n, criado, url) => ` PR #${n} ${criado ? 'aberto agora' : 'reaproveitado'}${url ? ` (${url})` : ''}`,
192
+ linhaPr: (n, criado, url, gitlab = false) => ` ${gitlab ? 'MR !' : 'PR #'}${n} ${criado ? 'aberto agora' : 'reaproveitado'}${url ? ` (${url})` : ''}`,
145
193
  linhaCorpo: (corpo) => ` corpo do PR ${corpo}`,
146
194
  resultado: (acao) => `${acao}.`,
147
195
  acoes: { 'publicou': 'PUBLICADA', 'publicaria': 'PUBLICARIA', 'ja-publicada': 'JÁ PUBLICADA', 'recusada': 'RECUSADA' },
@@ -152,6 +200,8 @@ exports.SHIP_PT_BR = {
152
200
  threadFechadaCorrecao: 'a entrega nova vai numa thread nova',
153
201
  modoSemPush: (tag) => `o modo ${tag} pede a autorização do dono para o push; o ork ship publicar só publica em #Auto e #Maestro`,
154
202
  modoSemPushCorrecao: (comando) => `o dono publica do próprio terminal: ${comando}`,
203
+ /** O comando do dono quando o tipo da forja nao se sabe sem rede (host proprio sem o bloco `forja:`). */
204
+ comandoDasDuasForjas: (gh, glab) => `no GitHub, ${gh}; no GitLab, ${glab}`,
155
205
  conduzida: (sessao, fase) => `a sessão ${sessao} conduz a thread agora (fase ${fase}); a branch pode mudar no meio da publicação`,
156
206
  conduzidaCorrecao: (thread) => `publique depois do fim do turno (ork conducao status ${thread})`,
157
207
  semBranch: (branch) => `a branch ${branch} da thread não existe neste repositório`,
@@ -186,27 +236,32 @@ exports.SHIP_PT_BR = {
186
236
  bundleCorrecao: (thread) => `rode ork ci prepare ${thread} na worktree e commite o bundle como ci(${thread}): bundle`,
187
237
  semRemoto: (remoto) => `o remoto ${remoto} não está configurado neste repositório`,
188
238
  semRemotoCorrecao: 'configure o remoto (git remote add) ou informe outro em --remoto',
189
- semForja: (remoto) => `o remoto ${remoto} não é um repositório do GitHub; o ork ship publicar abre PR só no GitHub`,
239
+ semForja: (remoto, motivo) => `o remoto ${remoto} não é um repositório do GitHub nem do GitLab${motivo ? ` (${motivo})` : ''}; o ork ship publicar abre PR/MR só nessas forjas`,
190
240
  semForjaCorrecao: 'publique a branch e abra o pedido de merge pela forja do remoto',
191
241
  lsRemoteFalhou: (remoto, erro) => `git ls-remote ${remoto} falhou: ${erro}`,
192
242
  prsFalharam: (erro) => `a lista de PRs da branch falhou: ${erro}`,
193
243
  redeCorrecao: 'confira a rede e o login do gh (gh auth status) e rode de novo',
194
- jaPublicada: (n) => `a branch já está no remoto no HEAD e o PR #${n} está aberto; nada a fazer`,
195
- jaMesclado: (n) => `o PR #${n} já foi mesclado no HEAD; nada a publicar`,
244
+ jaPublicada: (n, gitlab = false) => `a branch já está no remoto no HEAD e o ${rotuloDoPedido(n, gitlab)} está aberto; nada a fazer`,
245
+ jaMesclado: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} já foi mesclado no HEAD; nada a publicar`,
196
246
  registreAEntrega: (thread) => `registre a entrega: ork ship registrar-pr ${thread}`,
197
247
  remotoDivergiu: (remoto, branch, sha) => `o remoto ${remoto} tem a branch ${branch} em ${sha}, com commit que a branch local não tem`,
198
248
  remotoDivergiuCorrecao: (remoto, branch) => `traga o remoto para a branch pela sessão de GO (git pull --no-rebase ${remoto} ${branch}) e publique de novo; nunca force`,
199
- passoReaproveita: (n) => `reaproveita o PR #${n}, já aberto`,
200
- publicaria: (sha, n) => `ensaio: publicaria o HEAD ${sha} e ${n ? `atualizaria o PR #${n}` : 'abriria o PR'} (nada foi feito)`,
249
+ passoReaproveita: (n, gitlab = false) => `reaproveita o ${rotuloDoPedido(n, gitlab)}, já aberto`,
250
+ publicaria: (sha, n, gitlab = false) => `ensaio: publicaria o HEAD ${sha} e ${n ? `atualizaria o ${rotuloDoPedido(n, gitlab)}` : `abriria o ${gitlab ? 'MR' : 'PR'}`} (nada foi feito)`,
201
251
  pushFalhou: (remoto, branch, erro) => `o push de ${branch} para ${remoto} falhou: ${erro}`,
202
252
  pushSemProva: (remota, head) => `o ls-remote devolveu ${remota ?? '(nada)'} e o HEAD está em ${head}: o push não ficou provado`,
203
253
  pushSemProvaCorrecao: (thread) => `confira o remoto e rode ork ship publicar ${thread} de novo`,
204
- corpoPadrao: (tag, branch, sha, contexto) => `Publicado pelo ork ship publicar (modo ${tag}): a branch ${branch} no HEAD ${sha}, provada pelo ls-remote. ` +
205
- `O CHECK independente roda no CI (${contexto}) a partir deste PR.`,
254
+ corpoPadrao: (tag, branch, sha, contexto, gitlab = false) => `Publicado pelo ork ship publicar (modo ${tag}): a branch ${branch} no HEAD ${sha}, provada pelo ls-remote. ` +
255
+ `O CHECK independente roda no CI (${contexto}) a partir deste ${gitlab ? 'MR' : 'PR'}.`,
206
256
  prSemReleitura: 'o PR não apareceu na releitura da lista',
207
257
  prFalhou: (sha, erro) => `a branch foi publicada e provada no HEAD ${sha}, mas o PR não abriu: ${erro}`,
208
258
  prFalhouCorrecao: (thread) => `confira o login do gh e rode ork ship publicar ${thread} de novo (o push já está provado)`,
209
- publicou: (sha, n, criado) => `HEAD ${sha} publicado e provado; PR #${n} ${criado ? 'aberto agora' : 'reaproveitado'}`,
259
+ prsFalharamGitlab: (erro) => `a lista de MRs da branch falhou: ${erro}`,
260
+ redeCorrecaoGitlab: 'confira a rede e o login do glab no host (glab auth status) e rode de novo',
261
+ prSemReleituraGitlab: 'o MR não apareceu na releitura da lista',
262
+ prFalhouGitlab: (sha, erro) => `a branch foi publicada e provada no HEAD ${sha}, mas o MR não abriu: ${erro}`,
263
+ prFalhouCorrecaoGitlab: (thread) => `confira o login do glab e rode ork ship publicar ${thread} de novo (o push já está provado)`,
264
+ publicou: (sha, n, criado, gitlab = false) => `HEAD ${sha} publicado e provado; ${rotuloDoPedido(n, gitlab)} ${criado ? 'aberto agora' : 'reaproveitado'}`,
210
265
  // As etapas da pista
211
266
  remotoNaoLido: (remoto) => `o git ls-remote ${remoto} não respondeu`,
212
267
  branchPublicada: (sha) => `branch publicada no HEAD ${sha}`,
@@ -215,20 +270,20 @@ exports.SHIP_PT_BR = {
215
270
  prsNaoLidos: (erro) => `PRs não lidos: ${erro}`,
216
271
  prsCortados: (limite) => `a lista dos PRs abertos veio cortada nos ${limite} mais novos: o PR da branch não foi lido`,
217
272
  branchSemConferir: 'a branch ficou sem conferir nesta leitura da forja: o PR dela não foi lido',
218
- prFechado: (n) => `o PR #${n} foi fechado sem merge`,
273
+ prFechado: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} foi fechado sem merge`,
219
274
  semPr: 'sem PR da branch',
220
275
  ciSemPr: 'sem PR, o CI não roda',
221
276
  ciNaoExigido: 'CI não exigido pelo manifesto',
222
277
  conflitoSemPr: 'sem PR, sem conflito a medir',
223
- prMesclado: (n) => `PR #${n} mesclado`,
278
+ prMesclado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} mesclado`,
224
279
  ciDoMesclado: 'PR mesclado; o ork ship registrar-pr confere o CI no head',
225
- prRascunho: (n) => `PR #${n} aberto em rascunho`,
226
- prAberto: (n) => `PR #${n} aberto`,
227
- ciSemCheck: (contexto, n) => `o check ${contexto} ainda não apareceu no PR #${n}`,
280
+ prRascunho: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} aberto em rascunho`,
281
+ prAberto: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} aberto`,
282
+ ciSemCheck: (contexto, n, gitlab = false) => `o check ${contexto} ainda não apareceu no ${rotuloDoPedido(n, gitlab)}`,
228
283
  ciVerde: (contexto, sha) => `check ${contexto} verde no head ${sha}`,
229
- ciVermelho: (contexto, n) => `check ${contexto} vermelho no PR #${n}`,
230
- ciEsperando: (contexto, n) => `check ${contexto} em andamento no PR #${n}`,
231
- conflito: (n) => `o PR #${n} conflita com a base`,
284
+ ciVermelho: (contexto, n, gitlab = false) => `check ${contexto} vermelho no ${rotuloDoPedido(n, gitlab)}`,
285
+ ciEsperando: (contexto, n, gitlab = false) => `check ${contexto} em andamento no ${rotuloDoPedido(n, gitlab)}`,
286
+ conflito: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} conflita com a base`,
232
287
  semConflito: 'sem conflito com a base',
233
288
  conflitoNaoCalculado: 'o GitHub ainda não calculou o merge com a base',
234
289
  entregue: 'entregue: ship_done no ledger',
@@ -238,14 +293,14 @@ exports.SHIP_PT_BR = {
238
293
  proximoEntregue: 'entregue; o MASTER fecha a thread',
239
294
  proximoRegistrar: 'mesclado na base: registre a entrega',
240
295
  proximoConduzida: (sessao) => `a sessão ${sessao} conduz a thread agora; a entrega espera o fim do turno`,
241
- proximoPublicarNoPr: (n) => `publique os commits novos no PR #${n}`,
296
+ proximoPublicarNoPr: (n, gitlab = false) => `publique os commits novos no ${rotuloDoPedido(n, gitlab)}`,
242
297
  proximoPublicar: 'publique a branch e abra o PR',
243
298
  proximoDoDono: (thread, tag) => `o modo ${tag} da ${thread} pede a sua autorização de push: publique do seu terminal`,
244
- proximoConflito: (n) => `o PR #${n} conflita com a base: mescle a origin/main na worktree pela sessão de GO, rode o verify e regrave o bundle`,
245
- proximoCiVermelho: (contexto, n) => `o check ${contexto} está vermelho no PR #${n}: corrija pela sessão de GO e publique de novo`,
246
- proximoEsperandoCi: (contexto, n) => `esperando o check ${contexto} no PR #${n}`,
247
- proximoRascunho: (n) => `o PR #${n} está em rascunho, com o CI verde: tire do rascunho; o merge é do dono ou do condutor`,
248
- proximoMerge: (n) => `o PR #${n} está pronto para o merge, que é do dono ou do condutor`,
299
+ proximoConflito: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} conflita com a base: mescle a origin/main na worktree pela sessão de GO, rode o verify e regrave o bundle`,
300
+ proximoCiVermelho: (contexto, n, gitlab = false) => `o check ${contexto} está vermelho no ${rotuloDoPedido(n, gitlab)}: corrija pela sessão de GO e publique de novo`,
301
+ proximoEsperandoCi: (contexto, n, gitlab = false) => `esperando o check ${contexto} no ${rotuloDoPedido(n, gitlab)}`,
302
+ proximoRascunho: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} está em rascunho, com o CI verde: tire do rascunho; o merge é do dono ou do condutor`,
303
+ proximoMerge: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} está pronto para o merge, que é do dono ou do condutor`,
249
304
  // A impressao da pista
250
305
  cabecalhoPista: (quando, remoto, base) => `Pista de entrega (lida em ${quando}, base ${remoto}/${base})`,
251
306
  semPistas: 'Nenhuma thread aberta na entrega.',
@@ -303,6 +358,10 @@ exports.SHIP_EN = {
303
358
  contratoPublicoCorrecao: 'redo the change in a #Classic, #Maestro or #Auto thread',
304
359
  ciReprovou: (detalhe, sha, contexto) => `${detalhe} (commit ${sha}, context ${contexto})`,
305
360
  ciReprovouCorrecao: (contexto) => `publish the branch, wait for the ${contexto} check to go green on GitHub and run SHIP again`,
361
+ scanNaoVarrido: (categorias, sha) => `the security scan did not scan these loop categories at commit ${sha}: ${categorias} (tool unavailable, failed or no report)`,
362
+ passoAutorizariaSemScan: (quem, categorias, sha) => `dry run: the real ship would record ship_unscanned_authorized by ${quem} for ${categorias} at commit ${sha}`,
363
+ allowUnscannedSemValor: 'error: --allow-unscanned needs who authorizes: ork ship <thread> --para <branch> --allow-unscanned "<who>"',
364
+ scanNaoVarridoCorrecao: (thread) => `run ork security-scan with Docker or the native binaries and run SHIP again; to ship unscanned, authorize it: ork ship ${thread} --para <branch> --allow-unscanned "<who>"`,
306
365
  arvoreDona: (dona, para, suja) => `${dona} (the tree with ${para} checked out; ${suja ? 'DIRTY, ship would fail with tree.blocked' : 'clean'})`,
307
366
  arvoreTemporaria: (dir, para) => `temporary worktree at ${dir} (nobody has ${para} checked out)`,
308
367
  arvoreDeMerge: (arvore) => `merge tree: ${arvore}`,
@@ -329,22 +388,36 @@ exports.SHIP_EN = {
329
388
  semPrimeiroPaiCorrecao: 'check the repository: ship_done needs the merge that delivered the thread',
330
389
  passoJaIncorporado: (de, para, sha) => `(nothing to merge: ${de} is already an ancestor of ${para}, brought in by ${sha})`,
331
390
  pushFalhou: (remoto, para, erro) => `push to ${remoto}/${para} failed: ${erro}`,
391
+ configDoRemotoInvalida: (chave) => `ship.config-do-remoto.invalida: the remote config accepts only -c key=value pairs for the pinned transport keys (refused: ${chave || 'invalid shape'}); nothing was passed to git`,
332
392
  pushFalhouCorrecao: 'fix the access to the remote and run ship again (the local merge already happened)',
393
+ pushBaseProtegida: (remoto, para, erro) => `the protection of ${remoto}/${para} refused the direct push to the base (entrega.base-protegida): ${erro}`,
394
+ pushBaseProtegidaCorrecao: (thread) => `deliver by PR/MR: ork ship publicar ${thread} (in #Auto and #Maestro) or a request opened on the forge; after the merge, ` +
395
+ `ork ship registrar-pr ${thread}. The local merge on the base did not reach the remote`,
333
396
  pushSemProva: (sha, ponta) => `ls-remote returned ${sha ?? '(nothing)'} and the local target is at ${ponta}: the push was not proven`,
334
397
  pushSemProvaCorrecao: 'run ship again and check the remote',
335
398
  ciNaoExigidoDetalhe: 'CI gate not required by the manifest',
336
- ciRemotoNaoGithub: (remoto) => `remote ${remoto} is not a recognizable GitHub repository`,
399
+ ciRemotoNaoGithub: (remoto) => `remote ${remoto} is not a recognizable GitHub repository, nor a GitLab one`,
400
+ ciHostSemLogin: (host) => `gh is not logged in to ${host}: CI on that host was not queried`,
401
+ ciForjaNaoResolvida: (remoto, motivo) => `the forge of remote ${remoto} was not resolved: ${motivo}`,
337
402
  ciConsultaFalhou: 'GitHub query failed',
338
403
  ciRespostaInvalida: 'GitHub returned an invalid checks response',
404
+ ciIncompleto: (contexto) => `check ${contexto}: the commit's list of check runs or commit statuses came back incomplete, and the gate does not decide without all of it`,
405
+ ciStatusSemProdutorConfiavel: (contexto) => `${contexto}: commit status only, from accounts outside ci.produtor; a green status approves only from an accepted producer`,
406
+ ciSemProdutorAceito: (contexto, produtores, aceitos) => `${contexto}: green only from producers outside ci.produtor (${produtores}); accepted: ${aceitos}`,
407
+ ciProdutores: (contexto, produtores) => `check ${contexto} from more than one producer: ${produtores}`,
339
408
  ciSemCheck: (contexto) => `check ${contexto} not found on the commit`,
340
409
  ciVerde: 'independent CHECK green on GitHub',
410
+ ciBloqueado: (contexto, conclusao) => `check ${contexto}: blocked (${conclusao})`,
341
411
  ciEstado: (contexto, status, conclusao) => `check ${contexto}: ${status}/${conclusao || 'no conclusion'}`,
412
+ ciVerdeNoGitlab: 'independent CHECK green on GitLab',
413
+ ciLeituraFalhou: (contexto, motivo) => `check ${contexto}: CI was not read: ${motivo}`,
414
+ ciMescladoSemVinculo: (contexto, sha) => `ci.merged-results-sem-vinculo: ${contexto} ran only in a merged results pipeline with no proven link to head ${sha}; the gate does not approve`,
342
415
  usoRegistrarPr: 'usage: ork ship registrar-pr <thread-id> [--repo <owner/name> --pr <n>] | --todas [--remoto R] [--json] [--dry-run]',
343
416
  ensaio: 'Dry run (--dry-run): nothing was written.',
344
417
  nenhumaComMerge: 'No open thread with a ship(<thread>) merge on the base.',
345
418
  linhaDoRegistro: (thread, acao, motivo) => ` ${thread.padEnd(20)} ${acao.padEnd(13)} ${motivo}`,
346
419
  acoes: { 'registrou': 'recorded', 'registraria': 'would record', 'ja-registrada': 'already recorded', 'sem-merge': 'no merge',
347
- 'recusada': 'refused' },
420
+ 'recusada': 'refused', 'pulada': 'skipped' },
348
421
  avisoDeDocs: (n) => `Warning: ${n} roadmap page(s) with \`estado.codigo\` other than "Mesclado" after the merge; ` +
349
422
  'the push to the base fails on docs.paridade.merge:',
350
423
  docPendente: (id, arquivo, merge, thread, codigo) => ` ${id} (${arquivo}): merge ${merge} from ship(${thread}), estado.codigo "${codigo || 'empty'}"`,
@@ -353,6 +426,9 @@ exports.SHIP_EN = {
353
426
  registrariam: (n) => `${n} delivery(ies) would be recorded. To write them, run the same command without \`--dry-run\`.`,
354
427
  prThreadFechada: 'thread already closed',
355
428
  prSemMerge: (thread, remoto, base) => `no ship(${thread}) merge on ${remoto}/${base}`,
429
+ prSemLeitura: (remoto, base) => `git fetch of ${remoto}/${base} failed: without reading the remote the merge cannot be found`,
430
+ prSemVinculo: (thread, sha) => `merge ${sha} of ship(${thread}) has a single parent (squash or rebase) and does not tie the base to the verified head; deliver with a merge commit`,
431
+ prSemHead: (n, repo, forja = 'GitHub') => `${rotuloDoPedido(n, forja === 'GitLab')} of ${repo} is merged, but ${forja} did not report its head`,
356
432
  prJaTemShipDone: 'this delivery already has ship_done',
357
433
  prForaDaPonta: (merge, remoto, base) => `merge ${merge} is not at the tip of ${remoto}/${base}`,
358
434
  prSemCiVerde: (detalhe) => `no green CI on the PR head: ${detalhe}`,
@@ -360,15 +436,36 @@ exports.SHIP_EN = {
360
436
  prRegistrou: (merge) => `ship_done from merge ${merge} of the PR`,
361
437
  prRepoNaoDeclarado: (repo) => `repository ${repo} is not declared in \`ci.external_repositories\` of \`orkastery.yaml\``,
362
438
  prNumeroInvalido: (recebido) => `\`--pr\` must be the PR number, got ${recebido}`,
363
- prExternoJaTem: (n, repo) => `PR #${n} of ${repo} already has ship_done`,
364
- prConsultaFalhou: (n, repo) => `the GitHub query for PR #${n} of ${repo} failed`,
365
- prNaoMesclado: (n, repo) => `PR #${n} of ${repo} is not merged`,
366
- prNaoCitaThread: (n, repo, thread) => `PR #${n} of ${repo} does not mention thread ${thread} in its title, body or branch`,
367
- prRepoFalhou: (repo) => `the GitHub query for ${repo} failed`,
368
- prOutraBase: (n, base, repo, padrao) => `PR #${n} landed on ${base}, and the default branch of ${repo} is ${padrao ?? 'unknown'}`,
439
+ prExternoJaTem: (n, repo, gitlab = false) => `${rotuloDoPedido(n, gitlab)} of ${repo} already has ship_done`,
440
+ prConsultaFalhou: (n, repo, forja = 'GitHub') => `the ${forja} query for ${rotuloDoPedido(n, forja === 'GitLab')} of ${repo} failed`,
441
+ prNaoMesclado: (n, repo, gitlab = false) => `${rotuloDoPedido(n, gitlab)} of ${repo} is not merged`,
442
+ prNaoCitaThread: (n, repo, thread, gitlab = false) => `${rotuloDoPedido(n, gitlab)} of ${repo} does not mention thread ${thread} in its title, body or branch`,
443
+ prRepoFalhou: (repo, forja = 'GitHub') => `the ${forja} query for ${repo} failed`,
444
+ prOutraBase: (n, base, repo, padrao, gitlab = false) => `${rotuloDoPedido(n, gitlab)} landed on ${base}, and the default branch of ${repo} is ${padrao ?? 'unknown'}`,
369
445
  prExternoForaDaPonta: (merge, repo, base) => `merge ${merge} is not at the tip of ${repo}:${base}`,
370
- prExternoRegistraria: (merge, n, repo) => `dry run: would record ship_done from merge ${merge} of PR #${n} of ${repo} (nothing written)`,
371
- prExternoRegistrou: (merge, n, repo) => `ship_done from merge ${merge} of PR #${n} of ${repo}`,
446
+ prForjaDoExterno: (repo, motivo) => `the forge of ${repo} was not resolved: ${motivo}`,
447
+ prForjaDoProjetoNaoResolvida: (repo, remoto, motivo) => `the forge of remote ${remoto} was not resolved (${motivo}), and ${repo} is not queried on another host; declare forja.tipo in orkastery.yaml or log in to the forge CLI on that host`,
448
+ prRepoComSubgrupoNoGithub: (repo) => `${repo} has subgroups, and a GitHub repository is only owner/name; in a GitLab project, the remote or forja.tipo: gitlab in orkastery.yaml names the forge`,
449
+ prExternoRegistraria: (merge, n, repo, gitlab = false) => `dry run: would record ship_done from merge ${merge} of ${rotuloDoPedido(n, gitlab)} of ${repo} (nothing written)`,
450
+ prExternoRegistrou: (merge, n, repo, gitlab = false) => `ship_done from merge ${merge} of ${rotuloDoPedido(n, gitlab)} of ${repo}`,
451
+ guarda: {
452
+ situacoes: { 'proposto': 'proposed', 'agendado': 'scheduled', 'vigente': 'in force', 'expirado': 'expired', 'revogado': 'revoked',
453
+ 'encerrado': 'closed' },
454
+ origens: { 'envelope': 'by the envelope list', 'proposta': 'by the proposal waiting for the owner', 'despacho': 'by the arc dispatch log',
455
+ 'correlacao': 'by the last dispatch of the thread' },
456
+ doArco: (thread, arco, situacao, origem) => `noctum.guarda.thread-do-arco: thread ${thread} is work of arc ${arco} (${situacao}, ${origem})`,
457
+ doArcoCorrecao: (arco) => `this thread is delivered by the delivery step of arc ${arco}: its SHIP and MASTER belong to the arc (ork noctum status ${arco})`,
458
+ arcoIlegivel: (thread, arco, motivo) => `noctum.guarda.arco-ilegivel: the last dispatch of thread ${thread} came from arc ${arco}, and the arc cannot be read (${motivo})`,
459
+ arcoIlegivelCorrecao: (arco) => `inspect the arc before delivering the thread outside it (ork noctum status ${arco})`,
460
+ retencao: (thread, arco, situacao) => `noctum.guarda.thread-do-arco: arc ${arco} (${situacao}) dispatched thread ${thread} last; the beat and the Sentinel ` +
461
+ 'do not dispatch, resume or merge it until a dispatch outside the arc or a new arc that lists it',
462
+ sessaoDoArco: (thread, arco, situacao, sessao) => `noctum.guarda.thread-do-arco: arc ${arco} is ${situacao}, and session ${sessao} that it dispatched still conducts thread ${thread}: ` +
463
+ 'it does not deliver outside the arc',
464
+ sessaoDoArcoCorrecao: (arco) => `wait for the stop that the arc closing requests, or stop the session; with no arc session in flight, the thread is delivered by hand (ork noctum status ${arco})`,
465
+ reservaDoArco: (thread, arco, situacao, seq) => `noctum.guarda.thread-do-arco: arc ${arco} is ${situacao}, and reservation ${seq} that it made for thread ${thread} may have opened ` +
466
+ 'a session without an id: it does not deliver outside the arc',
467
+ reservaDoArcoCorrecao: (arco) => `wait for the watcher to reconcile the reservation (it concludes it with the session or returns it); with no arc session in flight, the thread is delivered by hand (ork noctum status ${arco})`,
468
+ },
372
469
  publicar: {
373
470
  uso: 'usage: ork ship publicar <thread-id> [--dry-run] [--remoto R] [--json]',
374
471
  usoPista: 'usage: ork ship pista [<thread-id>] [--remoto R] [--json]',
@@ -379,7 +476,7 @@ exports.SHIP_EN = {
379
476
  linhaRemoto: (remoto, antes, depois) => ` remote ${remoto}: ${depois} (before: ${antes})`,
380
477
  linhaPushProvado: ' push PROVEN by ls-remote (same sha as HEAD)',
381
478
  linhaPushSemProva: ' push without proof',
382
- linhaPr: (n, criado, url) => ` PR #${n} ${criado ? 'opened now' : 'reused'}${url ? ` (${url})` : ''}`,
479
+ linhaPr: (n, criado, url, gitlab = false) => ` ${gitlab ? 'MR !' : 'PR #'}${n} ${criado ? 'opened now' : 'reused'}${url ? ` (${url})` : ''}`,
383
480
  linhaCorpo: (corpo) => ` PR body ${corpo}`,
384
481
  resultado: (acao) => `${acao}.`,
385
482
  acoes: { 'publicou': 'PUBLISHED', 'publicaria': 'WOULD PUBLISH', 'ja-publicada': 'ALREADY PUBLISHED', 'recusada': 'REFUSED' },
@@ -389,6 +486,7 @@ exports.SHIP_EN = {
389
486
  threadFechadaCorrecao: 'the new delivery goes in a new thread',
390
487
  modoSemPush: (tag) => `the ${tag} mode asks for the owner's authorization to push; ork ship publicar only publishes in #Auto and #Maestro`,
391
488
  modoSemPushCorrecao: (comando) => `the owner publishes from their own terminal: ${comando}`,
489
+ comandoDasDuasForjas: (gh, glab) => `on GitHub, ${gh}; on GitLab, ${glab}`,
392
490
  conduzida: (sessao, fase) => `session ${sessao} is conducting the thread now (phase ${fase}); the branch may change in the middle of the publication`,
393
491
  conduzidaCorrecao: (thread) => `publish after the end of the turn (ork conducao status ${thread})`,
394
492
  semBranch: (branch) => `the thread branch ${branch} does not exist in this repository`,
@@ -423,27 +521,32 @@ exports.SHIP_EN = {
423
521
  bundleCorrecao: (thread) => `run ork ci prepare ${thread} in the worktree and commit the bundle as ci(${thread}): bundle`,
424
522
  semRemoto: (remoto) => `remote ${remoto} is not configured in this repository`,
425
523
  semRemotoCorrecao: 'configure the remote (git remote add) or give another one in --remoto',
426
- semForja: (remoto) => `remote ${remoto} is not a GitHub repository; ork ship publicar only opens PRs on GitHub`,
524
+ semForja: (remoto, motivo) => `remote ${remoto} is not a GitHub or GitLab repository${motivo ? ` (${motivo})` : ''}; ork ship publicar only opens PRs/MRs on those forges`,
427
525
  semForjaCorrecao: 'publish the branch and open the merge request through the remote forge',
428
526
  lsRemoteFalhou: (remoto, erro) => `git ls-remote ${remoto} failed: ${erro}`,
429
527
  prsFalharam: (erro) => `the branch PR list failed: ${erro}`,
430
528
  redeCorrecao: 'check the network and the gh login (gh auth status) and run it again',
431
- jaPublicada: (n) => `the branch is already on the remote at HEAD and PR #${n} is open; nothing to do`,
432
- jaMesclado: (n) => `PR #${n} was already merged at HEAD; nothing to publish`,
529
+ jaPublicada: (n, gitlab = false) => `the branch is already on the remote at HEAD and ${rotuloDoPedido(n, gitlab)} is open; nothing to do`,
530
+ jaMesclado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} was already merged at HEAD; nothing to publish`,
433
531
  registreAEntrega: (thread) => `record the delivery: ork ship registrar-pr ${thread}`,
434
532
  remotoDivergiu: (remoto, branch, sha) => `remote ${remoto} has branch ${branch} at ${sha}, with a commit the local branch does not have`,
435
533
  remotoDivergiuCorrecao: (remoto, branch) => `bring the remote into the branch through the GO session (git pull --no-rebase ${remoto} ${branch}) and publish again; never force`,
436
- passoReaproveita: (n) => `reuses PR #${n}, already open`,
437
- publicaria: (sha, n) => `rehearsal: would publish HEAD ${sha} and ${n ? `update PR #${n}` : 'open the PR'} (nothing was done)`,
534
+ passoReaproveita: (n, gitlab = false) => `reuses ${rotuloDoPedido(n, gitlab)}, already open`,
535
+ publicaria: (sha, n, gitlab = false) => `rehearsal: would publish HEAD ${sha} and ${n ? `update ${rotuloDoPedido(n, gitlab)}` : `open the ${gitlab ? 'MR' : 'PR'}`} (nothing was done)`,
438
536
  pushFalhou: (remoto, branch, erro) => `the push of ${branch} to ${remoto} failed: ${erro}`,
439
537
  pushSemProva: (remota, head) => `ls-remote returned ${remota ?? '(nothing)'} and HEAD is at ${head}: the push was not proven`,
440
538
  pushSemProvaCorrecao: (thread) => `check the remote and run ork ship publicar ${thread} again`,
441
- corpoPadrao: (tag, branch, sha, contexto) => `Published by ork ship publicar (${tag} mode): branch ${branch} at HEAD ${sha}, proven by ls-remote. ` +
442
- `The independent CHECK runs on CI (${contexto}) from this PR.`,
539
+ corpoPadrao: (tag, branch, sha, contexto, gitlab = false) => `Published by ork ship publicar (${tag} mode): branch ${branch} at HEAD ${sha}, proven by ls-remote. ` +
540
+ `The independent CHECK runs on CI (${contexto}) from this ${gitlab ? 'MR' : 'PR'}.`,
443
541
  prSemReleitura: 'the PR did not show up when the list was read again',
444
542
  prFalhou: (sha, erro) => `the branch was published and proven at HEAD ${sha}, but the PR did not open: ${erro}`,
445
543
  prFalhouCorrecao: (thread) => `check the gh login and run ork ship publicar ${thread} again (the push is already proven)`,
446
- publicou: (sha, n, criado) => `HEAD ${sha} published and proven; PR #${n} ${criado ? 'opened now' : 'reused'}`,
544
+ prsFalharamGitlab: (erro) => `the branch MR list failed: ${erro}`,
545
+ redeCorrecaoGitlab: 'check the network and the glab login on the host (glab auth status) and run it again',
546
+ prSemReleituraGitlab: 'the MR did not show up when the list was read again',
547
+ prFalhouGitlab: (sha, erro) => `the branch was published and proven at HEAD ${sha}, but the MR did not open: ${erro}`,
548
+ prFalhouCorrecaoGitlab: (thread) => `check the glab login and run ork ship publicar ${thread} again (the push is already proven)`,
549
+ publicou: (sha, n, criado, gitlab = false) => `HEAD ${sha} published and proven; ${rotuloDoPedido(n, gitlab)} ${criado ? 'opened now' : 'reused'}`,
447
550
  remotoNaoLido: (remoto) => `git ls-remote ${remoto} did not answer`,
448
551
  branchPublicada: (sha) => `branch published at HEAD ${sha}`,
449
552
  branchNaoPublicada: 'branch not published yet',
@@ -451,20 +554,20 @@ exports.SHIP_EN = {
451
554
  prsNaoLidos: (erro) => `PRs not read: ${erro}`,
452
555
  prsCortados: (limite) => `the open PR list was cut at the ${limite} newest: the branch PR was not read`,
453
556
  branchSemConferir: 'the branch was left unchecked in this forge read: its PR was not read',
454
- prFechado: (n) => `PR #${n} was closed without merge`,
557
+ prFechado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} was closed without merge`,
455
558
  semPr: 'no PR for the branch',
456
559
  ciSemPr: 'without a PR, CI does not run',
457
560
  ciNaoExigido: 'CI not required by the manifest',
458
561
  conflitoSemPr: 'without a PR, no conflict to measure',
459
- prMesclado: (n) => `PR #${n} merged`,
562
+ prMesclado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} merged`,
460
563
  ciDoMesclado: 'PR merged; ork ship registrar-pr checks the CI on the head',
461
- prRascunho: (n) => `PR #${n} open as a draft`,
462
- prAberto: (n) => `PR #${n} open`,
463
- ciSemCheck: (contexto, n) => `check ${contexto} has not shown up on PR #${n} yet`,
564
+ prRascunho: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} open as a draft`,
565
+ prAberto: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} open`,
566
+ ciSemCheck: (contexto, n, gitlab = false) => `check ${contexto} has not shown up on ${rotuloDoPedido(n, gitlab)} yet`,
464
567
  ciVerde: (contexto, sha) => `check ${contexto} green on head ${sha}`,
465
- ciVermelho: (contexto, n) => `check ${contexto} red on PR #${n}`,
466
- ciEsperando: (contexto, n) => `check ${contexto} running on PR #${n}`,
467
- conflito: (n) => `PR #${n} conflicts with the base`,
568
+ ciVermelho: (contexto, n, gitlab = false) => `check ${contexto} red on ${rotuloDoPedido(n, gitlab)}`,
569
+ ciEsperando: (contexto, n, gitlab = false) => `check ${contexto} running on ${rotuloDoPedido(n, gitlab)}`,
570
+ conflito: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} conflicts with the base`,
468
571
  semConflito: 'no conflict with the base',
469
572
  conflitoNaoCalculado: 'GitHub has not computed the merge with the base yet',
470
573
  entregue: 'delivered: ship_done in the ledger',
@@ -473,14 +576,14 @@ exports.SHIP_EN = {
473
576
  proximoEntregue: 'delivered; the MASTER closes the thread',
474
577
  proximoRegistrar: 'merged on the base: record the delivery',
475
578
  proximoConduzida: (sessao) => `session ${sessao} is conducting the thread now; the delivery waits for the end of the turn`,
476
- proximoPublicarNoPr: (n) => `publish the new commits to PR #${n}`,
579
+ proximoPublicarNoPr: (n, gitlab = false) => `publish the new commits to ${rotuloDoPedido(n, gitlab)}`,
477
580
  proximoPublicar: 'publish the branch and open the PR',
478
581
  proximoDoDono: (thread, tag) => `the ${tag} mode of ${thread} asks for your push authorization: publish from your terminal`,
479
- proximoConflito: (n) => `PR #${n} conflicts with the base: merge origin/main in the worktree through the GO session, run verify and write the bundle again`,
480
- proximoCiVermelho: (contexto, n) => `check ${contexto} is red on PR #${n}: fix it through the GO session and publish again`,
481
- proximoEsperandoCi: (contexto, n) => `waiting for check ${contexto} on PR #${n}`,
482
- proximoRascunho: (n) => `PR #${n} is a draft with green CI: take it out of draft; the merge belongs to the owner or the conductor`,
483
- proximoMerge: (n) => `PR #${n} is ready for the merge, which belongs to the owner or the conductor`,
582
+ proximoConflito: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} conflicts with the base: merge origin/main in the worktree through the GO session, run verify and write the bundle again`,
583
+ proximoCiVermelho: (contexto, n, gitlab = false) => `check ${contexto} is red on ${rotuloDoPedido(n, gitlab)}: fix it through the GO session and publish again`,
584
+ proximoEsperandoCi: (contexto, n, gitlab = false) => `waiting for check ${contexto} on ${rotuloDoPedido(n, gitlab)}`,
585
+ proximoRascunho: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} is a draft with green CI: take it out of draft; the merge belongs to the owner or the conductor`,
586
+ proximoMerge: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} is ready for the merge, which belongs to the owner or the conductor`,
484
587
  cabecalhoPista: (quando, remoto, base) => `Delivery lane (read at ${quando}, base ${remoto}/${base})`,
485
588
  semPistas: 'No open thread in delivery.',
486
589
  remotoNaoRespondeu: (remoto) => `Warning: git ls-remote ${remoto} did not answer; the branch step was left unread.`,