@orkastery/cli 0.5.3 → 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 (502) 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 +195 -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/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2b: a familia `ship` do catalogo de mensagens (`ork ship` e `ork ship registrar-pr`). O
4
+ * pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * O detalhe e a correcao de um bloqueio, a razao da autorizacao, os passos do ensaio e o motivo do
7
+ * `registrar-pr` vao ao ledger ou ao `--json`: o comando os monta em pt-BR, e so a impressao os remonta no
8
+ * locale (G2 da F2b). Comando, branch, sha e motivo tipado saem iguais nas duas linguas; a mensagem de
9
+ * merge do git e o que so o ledger le seguem em pt-BR fora do catalogo.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
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}`);
15
+ exports.SHIP_PT_BR = {
16
+ uso: 'uso: ork ship <thread-id> --para <branch> [--de <branch>] [--dry-run]',
17
+ // textoDoShip
18
+ cabecalho: (dryRun, thread) => `${dryRun ? 'ork ship (--dry-run, nada foi executado)' : 'ork ship'}: thread ${thread}`,
19
+ de: (branch, sha) => ` de ${branch}${sha ? ` @ ${sha}` : ''}`,
20
+ para: (branch, sha) => ` para ${branch}${sha ? ` @ ${sha}` : ''}`,
21
+ autorizado: (por, tipo) => ` autorizacao AUTORIZADO por ${por} (${tipo})`,
22
+ /** O tipo da autorizacao e dado (ledger, --json); o texto so o traduz na impressao. */
23
+ tiposDeAutorizacao: { 'modo': 'modo', 'humano-no-cli': 'humano-no-cli', 'humano-antecipado': 'humano-antecipado',
24
+ 'pendente': 'pendente' },
25
+ aguardandoAutorizacao: ' autorizacao AGUARDANDO AUTORIZACAO HUMANA',
26
+ razao: (razao) => ` ${razao}`,
27
+ verificacao: (ok, sha, claimsOk, claims, comandosOk, comandos) => ` verificacao ${ok ? 'passou' : 'REPROVOU'} no HEAD ${sha} (${claimsOk}/${claims} claims, ${comandosOk}/${comandos} comandos)`,
28
+ ciExigido: (estado, contexto, sha) => ` ci ${estado} ${contexto} em ${sha}`,
29
+ ciNaoExigido: ' ci não exigido',
30
+ leaseOcupado: (lease, thread, desde) => ` lease ${lease} OCUPADO pela thread ${thread} (desde ${desde})`,
31
+ leaseTomado: (lease, thread) => ` lease ${lease} tomado por ${thread} e liberado ao fim`,
32
+ leaseLivre: (lease) => ` lease ${lease} livre`,
33
+ bloqueado: (motivo) => `BLOQUEADO. motivo tipado: ${motivo}`,
34
+ detalhe: (detalhe) => ` detalhe ${detalhe}`,
35
+ correcao: (correcao) => ` correcao ${correcao}`,
36
+ passosDoEnsaio: 'Passos que o ship real executaria, nesta ordem:',
37
+ nadaAMergear: (de, para, sha) => `Nada a mergear: ${de} ja estava em ${para}, incorporado em ${sha}.`,
38
+ mergeConcluido: (sha) => `Merge --no-ff concluido: ${sha}`,
39
+ pushProvado: (remoto, para, sha) => `Push PROVADO: ls-remote de ${remoto}/${para} devolveu ${sha}`,
40
+ mesmoSha: (sha) => ` e o destino local esta no mesmo sha: ${sha}`,
41
+ pushNaoProvado: (detalhe) => `Push nao provado: ${detalhe}`,
42
+ semRemotoConfigurado: 'sem remoto configurado',
43
+ evidencia: 'Evidencia (comandos executados):',
44
+ ledger: (thread) => `Ledger: ork phase list ${thread} (evento ship_done)`,
45
+ // Autorizacao (vai ao ledger como dado do ship)
46
+ autorizadoNaLinha: (tag) => `pausa de push do modo ${tag} autorizada na linha de comando`,
47
+ porTag: (tag) => `#TAG ${tag} no pedido do builder`,
48
+ autorizadoPeloModo: (tag) => `o modo ${tag} entrega dentro de um bloco sem pausa: a #TAG e a autorizacao previa`,
49
+ autorizadoAntes: (quando) => `autorizacao antecipada de push registrada no ledger em ${quando}`,
50
+ semAutorizacao: (tag, thread) => `o modo ${tag} pausa no push e ainda nao ha autorizacao humana registrada. ` +
51
+ `Autorize na entrega: ork ship ${thread} --para <branch> --autorizar-push <quem>`,
52
+ // Bloqueios: detalhe e correcao (vao ao ledger)
53
+ verificacaoReprovou: (commit, motivos) => `verificacao reprovou no HEAD ${commit}: ${motivos}`,
54
+ rodeVerify: (thread) => 'rode `ork verify ' + thread + '` e corrija antes de entregar',
55
+ origemAusente: (de) => `branch de origem "${de}" nao existe neste repositorio`,
56
+ origemAusenteCorrecao: 'use --de <branch> ou crie a branch da thread',
57
+ destinoAusente: (para) => `branch de destino "${para}" nao existe neste repositorio`,
58
+ destinoAusenteCorrecao: 'crie a branch de destino ou informe outra em --para',
59
+ contratoPublico: (tocados) => `contrato publico em ciclo sem PLAN nem CHECK: ${tocados}`,
60
+ contratoPublicoCorrecao: 'refaca a mudanca numa thread #Classic, #Maestro ou #Auto',
61
+ ciReprovou: (detalhe, sha, contexto) => `${detalhe} (commit ${sha}, contexto ${contexto})`,
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>"`,
67
+ arvoreDona: (dona, para, suja) => `${dona} (arvore que tem ${para} em check-out; ${suja ? 'SUJA, o ship reprovaria com tree.blocked' : 'limpa'})`,
68
+ arvoreTemporaria: (dir, para) => `worktree temporaria em ${dir} (ninguem tem ${para} em check-out)`,
69
+ arvoreDeMerge: (arvore) => `arvore de merge: ${arvore}`,
70
+ semPushPorFlag: 'push nao executado por --sem-push (merge local concluido)',
71
+ semRemoto: (remoto) => `remoto "${remoto}" nao configurado: merge local concluido, sem push a provar`,
72
+ passoSemPush: (motivo) => `sem push: ${motivo}`,
73
+ passoProvaDoPush: (remoto, para) => `git ls-remote ${remoto} refs/heads/${para} (prova do push)`,
74
+ passoMerge: (de) => `git merge --no-ff ${de} -m "<mensagem de ship>"`,
75
+ autorizeNaEntrega: (thread) => `ork ship ${thread} --para <branch> --autorizar-push <quem>`,
76
+ leaseComOutra: (lease, thread, desde, motivo, posicao) => `lease ${lease} esta com a thread ${thread} desde ${desde} (${motivo}); esta thread entrou na merge queue na posicao ${posicao}`,
77
+ desconhecida: '(desconhecida)',
78
+ semMotivo: 'sem motivo',
79
+ /** Quem autorizou o push antes, quando o ledger nao diz o nome. */
80
+ humano: 'humano',
81
+ arvoreSuja: (para, dona) => `a branch de destino "${para}" esta em check-out em ${dona} com alteracoes nao commitadas; commite ou reverta la antes do ship`,
82
+ arvoreNaoMontada: (para, erro) => `nao foi possivel montar a arvore de merge de "${para}": ${erro}`,
83
+ arvoreCorrecao: 'deixe a arvore da branch de destino limpa (ou libere a branch) e rode o ship de novo',
84
+ mergeFalhou: (de, para, erro) => `merge de ${de} em ${para} falhou: ${erro}`,
85
+ mergeFalhouCorrecao: 'resolva o conflito na branch da thread e rode o ship de novo',
86
+ headIlegivel: 'nao foi possivel ler o HEAD apos o merge',
87
+ confiraRepositorio: 'confira o repositorio',
88
+ naoAncestral: (de, merge) => `o commit de ${de} nao aparece como ancestral do merge ${merge}`,
89
+ naoEmpurre: 'nao empurre: investigue o estado do repositorio',
90
+ semPrimeiroPai: (de, para) => `${de} ja e ancestral de ${para}, mas o git nao achou o commit de primeiro pai que o incorporou`,
91
+ semPrimeiroPaiCorrecao: 'confira o repositorio: o ship_done precisa do merge que entregou a thread',
92
+ passoJaIncorporado: (de, para, sha) => `(nada a mergear: ${de} ja e ancestral de ${para}, incorporado em ${sha})`,
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`,
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`,
99
+ pushSemProva: (sha, ponta) => `ls-remote devolveu ${sha ?? '(nada)'} e o destino local esta em ${ponta}: o push nao ficou provado`,
100
+ pushSemProvaCorrecao: 'rode o ship de novo e confira o remoto',
101
+ // ci.ts: o detalhe da consulta ao CI (vai ao ledger dentro da evidencia do ship)
102
+ ciNaoExigidoDetalhe: 'gate de CI não exigido pelo manifesto',
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}`,
106
+ ciConsultaFalhou: 'consulta ao GitHub falhou',
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}`,
112
+ ciSemCheck: (contexto) => `check ${contexto} não encontrado no commit`,
113
+ ciVerde: 'CHECK independente verde no GitHub',
114
+ ciBloqueado: (contexto, conclusao) => `check ${contexto}: bloqueado (${conclusao})`,
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`,
119
+ // ork ship registrar-pr
120
+ usoRegistrarPr: 'uso: ork ship registrar-pr <thread-id> [--repo <dono/nome> --pr <n>] | --todas [--remoto R] [--json] [--dry-run]',
121
+ ensaio: 'Ensaio (--dry-run): nada foi gravado.',
122
+ nenhumaComMerge: 'Nenhuma thread aberta com merge ship(<thread>) na base.',
123
+ linhaDoRegistro: (thread, acao, motivo) => ` ${thread.padEnd(20)} ${acao.padEnd(13)} ${motivo}`,
124
+ /** A acao e dado do `--json`; o texto so a traduz na impressao. */
125
+ acoes: { 'registrou': 'registrou', 'registraria': 'registraria', 'ja-registrada': 'ja-registrada', 'sem-merge': 'sem-merge',
126
+ 'recusada': 'recusada', 'pulada': 'pulada' },
127
+ avisoDeDocs: (n) => `Aviso: ${n} pagina(s) do roadmap com estado.codigo fora de "Mesclado" depois do merge; ` +
128
+ 'o push da base reprova em docs.paridade.merge:',
129
+ docPendente: (id, arquivo, merge, thread, codigo) => ` ${id} (${arquivo}): merge ${merge} de ship(${thread}), estado.codigo "${codigo || 'vazio'}"`,
130
+ docPendenteComando: (comando) => ` ${comando} (num PR de docs sobre a base atualizada)`,
131
+ registradas: (n) => `${n} entrega(s) registrada(s). Fechar pelo MASTER so a(s) desta entrega (a nota humana sobrescreve):`,
132
+ registrariam: (n) => `${n} entrega(s) seria(m) registrada(s). Para gravar, rode o mesmo comando sem --dry-run.`,
133
+ // entrega-pr.ts: o motivo de cada registro (sai no --json)
134
+ prThreadFechada: 'thread ja fechada',
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`,
139
+ prJaTemShipDone: 'esta entrega ja tem ship_done',
140
+ prForaDaPonta: (merge, remoto, base) => `o merge ${merge} nao esta na ponta de ${remoto}/${base}`,
141
+ prSemCiVerde: (detalhe) => `sem CI verde no head do PR: ${detalhe}`,
142
+ prRegistraria: (merge) => `ensaio: registraria ship_done pelo merge ${merge} do PR (nada gravado)`,
143
+ prRegistrou: (merge) => `ship_done pelo merge ${merge} do PR`,
144
+ prRepoNaoDeclarado: (repo) => `o repositorio ${repo} nao esta declarado em ci.external_repositories do orkastery.yaml`,
145
+ prNumeroInvalido: (recebido) => `--pr precisa ser o numero do PR, recebido ${recebido}`,
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'}`,
152
+ prExternoForaDaPonta: (merge, repo, base) => `o merge ${merge} nao esta na ponta de ${repo}:${base}`,
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
+ },
180
+ // RM-059 (F7, T7.1): `ork ship publicar` e `ork ship pista`. O detalhe, a correcao e o texto das etapas vao ao
181
+ // `--json` e ao ledger em pt-BR; a impressao os remonta no locale do comando.
182
+ publicar: {
183
+ uso: 'uso: ork ship publicar <thread-id> [--dry-run] [--remoto R] [--json]',
184
+ usoPista: 'uso: ork ship pista [<thread-id>] [--remoto R] [--json]',
185
+ semAutorizarPush: 'erro: ork ship publicar não aceita --autorizar-push: ele só publica no modo que já autoriza o push ' +
186
+ '(#Auto e #Maestro); nos outros modos, o push é do dono, no terminal dele',
187
+ cabecalho: (dryRun, thread, tag) => `${dryRun ? 'ork ship publicar (--dry-run, nada foi publicado nem gravado)' : 'ork ship publicar'}: thread ${thread} (${tag})`,
188
+ linhaBranch: (branch, sha) => ` branch ${branch} @ ${sha}`,
189
+ linhaRemoto: (remoto, antes, depois) => ` remoto ${remoto}: ${depois} (antes: ${antes})`,
190
+ linhaPushProvado: ' push PROVADO pelo ls-remote (mesmo sha do HEAD)',
191
+ linhaPushSemProva: ' push sem prova',
192
+ linhaPr: (n, criado, url, gitlab = false) => ` ${gitlab ? 'MR !' : 'PR #'}${n} ${criado ? 'aberto agora' : 'reaproveitado'}${url ? ` (${url})` : ''}`,
193
+ linhaCorpo: (corpo) => ` corpo do PR ${corpo}`,
194
+ resultado: (acao) => `${acao}.`,
195
+ acoes: { 'publicou': 'PUBLICADA', 'publicaria': 'PUBLICARIA', 'ja-publicada': 'JÁ PUBLICADA', 'recusada': 'RECUSADA' },
196
+ // As conferencias (detalhe e correcao vao ao --json)
197
+ threadInexistente: (thread, erro) => `a thread ${thread} não foi lida neste projeto: ${erro}`,
198
+ threadInexistenteCorrecao: 'confira o id da thread (ork thread status <thread>)',
199
+ threadFechada: (thread) => `a thread ${thread} está fechada; nada a publicar`,
200
+ threadFechadaCorrecao: 'a entrega nova vai numa thread nova',
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`,
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}`,
205
+ conduzida: (sessao, fase) => `a sessão ${sessao} conduz a thread agora (fase ${fase}); a branch pode mudar no meio da publicação`,
206
+ conduzidaCorrecao: (thread) => `publique depois do fim do turno (ork conducao status ${thread})`,
207
+ semBranch: (branch) => `a branch ${branch} da thread não existe neste repositório`,
208
+ semBranchCorrecao: (thread) => `confira a worktree da thread (ork worktree ensure ${thread})`,
209
+ branchEBase: (base) => `a branch da thread é a base ${base}; publicar a base sem merge é o push direto que o ork ship barra`,
210
+ branchEBaseCorrecao: 'a entrega sai de uma branch de thread (ork/<thread>), nunca da base',
211
+ semProduto: (branch, base) => `a branch ${branch} não tem commit fora de ${base}; nada a publicar`,
212
+ semProdutoCorrecao: 'commite o trabalho da thread pela sessão de GO antes de publicar',
213
+ checkSemCiclo: (tag) => `o ciclo ${tag} não tem CHECK`,
214
+ checkAusente: 'o docs/check.md da thread ainda não foi gravado',
215
+ checkSemVeredito: 'o docs/check.md não tem exatamente um veredito',
216
+ checkOutroVeredito: (veredito) => `o veredito do CHECK é ${veredito}`,
217
+ checkVelho: (sha) => `o CHECK com PASSOU é anterior ao commit ${sha}`,
218
+ checkFeito: 'CHECK com veredito PASSOU depois do último commit de produto',
219
+ comandoDoCheck: (thread) => `ork phase run ${thread} CHECK --prompt "<pedido da fase>"`,
220
+ checkCorrecao: (thread) => `rode o CHECK da thread no HEAD e grave o veredito PASSOU (ork phase run ${thread} CHECK --prompt "<pedido da fase>")`,
221
+ verifyAusente: 'nenhum ork verify gravado na thread',
222
+ verifyReprovou: (sha, motivos) => `o último ork verify reprovou no commit ${sha} (${motivos})`,
223
+ verifyAntigo: (sha) => `o último ork verify verde foi no commit ${sha}, e o HEAD mudou depois dele além do bundle`,
224
+ verifyNoHead: (sha) => `ork verify verde no HEAD ${sha}`,
225
+ verifySoBundle: (sha) => `ork verify verde no commit ${sha}; depois dele, só o bundle`,
226
+ verifySoClaims: (sha) => `o último ork verify (commit ${sha}) rodou só as claims, sem o build e o test do manifesto`,
227
+ verifyCorrecao: (thread) => `rode ork verify ${thread} no HEAD e corrija antes de publicar`,
228
+ bundleAusente: (arquivo) => `o bundle ${arquivo} não está no HEAD`,
229
+ bundleInvalido: (arquivo) => `o bundle ${arquivo} no HEAD não abre como ork.ci-bundle/v1 desta thread`,
230
+ bundleOutraBranch: (arquivo, branch) => `o bundle ${arquivo} no HEAD é da branch ${branch}`,
231
+ bundleVelho: (faltam, sobram) => `o bundle no HEAD está velho` +
232
+ `${faltam ? `: faltam as claims ${faltam}` : ''}${sobram ? `${faltam ? ';' : ':'} sobram as claims ${sobram}` : ''}`,
233
+ bundleMudou: (ids) => `o bundle no HEAD está velho: o comando das claims ${ids} mudou depois dele`,
234
+ bundleManifestoMudou: 'o bundle no HEAD está velho: os comandos de verify do manifesto mudaram depois dele',
235
+ bundleFeito: (n) => `bundle no HEAD com as ${n} claims ativas e os comandos delas`,
236
+ bundleCorrecao: (thread) => `rode ork ci prepare ${thread} na worktree e commite o bundle como ci(${thread}): bundle`,
237
+ semRemoto: (remoto) => `o remoto ${remoto} não está configurado neste repositório`,
238
+ semRemotoCorrecao: 'configure o remoto (git remote add) ou informe outro em --remoto',
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`,
240
+ semForjaCorrecao: 'publique a branch e abra o pedido de merge pela forja do remoto',
241
+ lsRemoteFalhou: (remoto, erro) => `git ls-remote ${remoto} falhou: ${erro}`,
242
+ prsFalharam: (erro) => `a lista de PRs da branch falhou: ${erro}`,
243
+ redeCorrecao: 'confira a rede e o login do gh (gh auth status) e rode de novo',
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`,
246
+ registreAEntrega: (thread) => `registre a entrega: ork ship registrar-pr ${thread}`,
247
+ remotoDivergiu: (remoto, branch, sha) => `o remoto ${remoto} tem a branch ${branch} em ${sha}, com commit que a branch local não tem`,
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`,
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)`,
251
+ pushFalhou: (remoto, branch, erro) => `o push de ${branch} para ${remoto} falhou: ${erro}`,
252
+ pushSemProva: (remota, head) => `o ls-remote devolveu ${remota ?? '(nada)'} e o HEAD está em ${head}: o push não ficou provado`,
253
+ pushSemProvaCorrecao: (thread) => `confira o remoto e rode ork ship publicar ${thread} de novo`,
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'}.`,
256
+ prSemReleitura: 'o PR não apareceu na releitura da lista',
257
+ prFalhou: (sha, erro) => `a branch foi publicada e provada no HEAD ${sha}, mas o PR não abriu: ${erro}`,
258
+ prFalhouCorrecao: (thread) => `confira o login do gh e rode ork ship publicar ${thread} de novo (o push já está provado)`,
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'}`,
265
+ // As etapas da pista
266
+ remotoNaoLido: (remoto) => `o git ls-remote ${remoto} não respondeu`,
267
+ branchPublicada: (sha) => `branch publicada no HEAD ${sha}`,
268
+ branchNaoPublicada: 'branch ainda não publicada',
269
+ commitsSemPush: (remota, head) => `o remoto está em ${remota} e o HEAD em ${head}: há commits sem push`,
270
+ prsNaoLidos: (erro) => `PRs não lidos: ${erro}`,
271
+ prsCortados: (limite) => `a lista dos PRs abertos veio cortada nos ${limite} mais novos: o PR da branch não foi lido`,
272
+ branchSemConferir: 'a branch ficou sem conferir nesta leitura da forja: o PR dela não foi lido',
273
+ prFechado: (n, gitlab = false) => `o ${rotuloDoPedido(n, gitlab)} foi fechado sem merge`,
274
+ semPr: 'sem PR da branch',
275
+ ciSemPr: 'sem PR, o CI não roda',
276
+ ciNaoExigido: 'CI não exigido pelo manifesto',
277
+ conflitoSemPr: 'sem PR, sem conflito a medir',
278
+ prMesclado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} mesclado`,
279
+ ciDoMesclado: 'PR mesclado; o ork ship registrar-pr confere o CI no head',
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)}`,
283
+ ciVerde: (contexto, sha) => `check ${contexto} verde no head ${sha}`,
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`,
287
+ semConflito: 'sem conflito com a base',
288
+ conflitoNaoCalculado: 'o GitHub ainda não calculou o merge com a base',
289
+ entregue: 'entregue: ship_done no ledger',
290
+ mergeSemRegistro: (sha) => `merge ${sha} na base, sem ship_done`,
291
+ semShipDone: 'sem ship_done ainda',
292
+ // O proximo passo
293
+ proximoEntregue: 'entregue; o MASTER fecha a thread',
294
+ proximoRegistrar: 'mesclado na base: registre a entrega',
295
+ proximoConduzida: (sessao) => `a sessão ${sessao} conduz a thread agora; a entrega espera o fim do turno`,
296
+ proximoPublicarNoPr: (n, gitlab = false) => `publique os commits novos no ${rotuloDoPedido(n, gitlab)}`,
297
+ proximoPublicar: 'publique a branch e abra o PR',
298
+ proximoDoDono: (thread, tag) => `o modo ${tag} da ${thread} pede a sua autorização de push: publique do seu terminal`,
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`,
304
+ // A impressao da pista
305
+ cabecalhoPista: (quando, remoto, base) => `Pista de entrega (lida em ${quando}, base ${remoto}/${base})`,
306
+ semPistas: 'Nenhuma thread aberta na entrega.',
307
+ remotoNaoRespondeu: (remoto) => `Aviso: o git ls-remote ${remoto} não respondeu; a etapa da branch ficou sem leitura.`,
308
+ prsNaoResponderam: (erro) => `Aviso: os PRs não foram lidos (${erro}); PR, CI e conflito ficaram sem leitura.`,
309
+ linhaDaThread: (thread, tag, branch) => ` ${thread} ${tag} ${branch}`,
310
+ /** O nome e a marca de cada etapa sao a mesma palavra nas duas linguas, fora conflito e entrega. */
311
+ nomeDaEtapa: (id) => ({ check: 'CHECK', verify: 'verify', bundle: 'bundle', branch: 'branch', pr: 'PR', ci: 'CI',
312
+ conflito: 'conflito', entrega: 'entrega' }[id] ?? id),
313
+ marcaDaEtapa: (estado) => ({ 'feita': 'ok', 'pendente': '...', 'falhou': 'X', 'nao-lida': '?', 'nao-se-aplica': '-' }[estado] ?? estado),
314
+ linhaDoProximo: (texto, comando) => ` próximo: ${texto}${comando ? ` (${comando})` : ''}`,
315
+ },
316
+ };
317
+ exports.SHIP_EN = {
318
+ uso: 'usage: ork ship <thread-id> --para <branch> [--de <branch>] [--dry-run]',
319
+ cabecalho: (dryRun, thread) => `${dryRun ? 'ork ship (--dry-run, nothing was run)' : 'ork ship'}: thread ${thread}`,
320
+ de: (branch, sha) => ` from ${branch}${sha ? ` @ ${sha}` : ''}`,
321
+ para: (branch, sha) => ` to ${branch}${sha ? ` @ ${sha}` : ''}`,
322
+ autorizado: (por, tipo) => ` authorization AUTHORIZED by ${por} (${tipo})`,
323
+ tiposDeAutorizacao: { 'modo': 'by mode', 'humano-no-cli': 'human on the command line', 'humano-antecipado': 'human, in advance',
324
+ 'pendente': 'pending' },
325
+ aguardandoAutorizacao: ' authorization WAITING FOR HUMAN AUTHORIZATION',
326
+ razao: (razao) => ` ${razao}`,
327
+ verificacao: (ok, sha, claimsOk, claims, comandosOk, comandos) => ` verification ${ok ? 'passed' : 'FAILED'} at HEAD ${sha} (${claimsOk}/${claims} claims, ${comandosOk}/${comandos} commands)`,
328
+ ciExigido: (estado, contexto, sha) => ` ci ${estado} ${contexto} at ${sha}`,
329
+ ciNaoExigido: ' ci not required',
330
+ leaseOcupado: (lease, thread, desde) => ` lease ${lease} HELD by thread ${thread} (since ${desde})`,
331
+ leaseTomado: (lease, thread) => ` lease ${lease} taken by ${thread} and released at the end`,
332
+ leaseLivre: (lease) => ` lease ${lease} free`,
333
+ bloqueado: (motivo) => `BLOCKED. Typed reason: ${motivo}`,
334
+ detalhe: (detalhe) => ` detail ${detalhe}`,
335
+ correcao: (correcao) => ` fix ${correcao}`,
336
+ passosDoEnsaio: 'Steps the real ship would run, in this order:',
337
+ nadaAMergear: (de, para, sha) => `Nothing to merge: ${de} was already in ${para}, brought in by ${sha}.`,
338
+ mergeConcluido: (sha) => `\`--no-ff\` merge done: ${sha}`,
339
+ pushProvado: (remoto, para, sha) => `Push PROVEN: ls-remote of ${remoto}/${para} returned ${sha}`,
340
+ mesmoSha: (sha) => ` and the local target is at the same sha: ${sha}`,
341
+ pushNaoProvado: (detalhe) => `Push not proven: ${detalhe}`,
342
+ semRemotoConfigurado: 'no remote configured',
343
+ evidencia: 'Evidence (commands run):',
344
+ ledger: (thread) => `Ledger: \`ork phase list ${thread}\` (ship_done event)`,
345
+ autorizadoNaLinha: (tag) => `push pause of mode ${tag} authorized on the command line`,
346
+ porTag: (tag) => `#TAG ${tag} in the builder's request`,
347
+ autorizadoPeloModo: (tag) => `mode ${tag} ships inside a block with no pause: the #TAG is the prior authorization`,
348
+ autorizadoAntes: (quando) => `push authorized in advance, recorded in the ledger at ${quando}`,
349
+ semAutorizacao: (tag, thread) => `mode ${tag} pauses at the push and no human authorization is recorded yet. ` +
350
+ `Authorize it at delivery: \`ork ship ${thread} --para <branch> --autorizar-push <who>\``,
351
+ verificacaoReprovou: (commit, motivos) => `verification failed at HEAD ${commit}: ${motivos}`,
352
+ rodeVerify: (thread) => 'run `ork verify ' + thread + '` and fix it before shipping',
353
+ origemAusente: (de) => `source branch "${de}" does not exist in this repository`,
354
+ origemAusenteCorrecao: 'pass `--de <branch>` or create the thread branch',
355
+ destinoAusente: (para) => `target branch "${para}" does not exist in this repository`,
356
+ destinoAusenteCorrecao: 'create the target branch or pass another one with `--para`',
357
+ contratoPublico: (tocados) => `public contract in a cycle without PLAN or CHECK: ${tocados}`,
358
+ contratoPublicoCorrecao: 'redo the change in a #Classic, #Maestro or #Auto thread',
359
+ ciReprovou: (detalhe, sha, contexto) => `${detalhe} (commit ${sha}, context ${contexto})`,
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>"`,
365
+ arvoreDona: (dona, para, suja) => `${dona} (the tree with ${para} checked out; ${suja ? 'DIRTY, ship would fail with tree.blocked' : 'clean'})`,
366
+ arvoreTemporaria: (dir, para) => `temporary worktree at ${dir} (nobody has ${para} checked out)`,
367
+ arvoreDeMerge: (arvore) => `merge tree: ${arvore}`,
368
+ semPushPorFlag: 'push skipped by `--sem-push` (local merge done)',
369
+ semRemoto: (remoto) => `remote "${remoto}" not configured: local merge done, no push to prove`,
370
+ passoSemPush: (motivo) => `no push: ${motivo}`,
371
+ passoProvaDoPush: (remoto, para) => `git ls-remote ${remoto} refs/heads/${para} (push proof)`,
372
+ passoMerge: (de) => `git merge --no-ff ${de} -m "<ship message>"`,
373
+ autorizeNaEntrega: (thread) => `ork ship ${thread} --para <branch> --autorizar-push <who>`,
374
+ leaseComOutra: (lease, thread, desde, motivo, posicao) => `lease ${lease} is held by thread ${thread} since ${desde} (${motivo}); this thread joined the merge queue at position ${posicao}`,
375
+ desconhecida: '(unknown)',
376
+ semMotivo: 'no reason',
377
+ humano: 'a human',
378
+ arvoreSuja: (para, dona) => `target branch "${para}" is checked out at ${dona} with uncommitted changes; commit or revert them there before shipping`,
379
+ arvoreNaoMontada: (para, erro) => `could not set up the merge tree for "${para}": ${erro}`,
380
+ arvoreCorrecao: 'leave the target branch tree clean (or free the branch) and run ship again',
381
+ mergeFalhou: (de, para, erro) => `merge of ${de} into ${para} failed: ${erro}`,
382
+ mergeFalhouCorrecao: 'resolve the conflict on the thread branch and run ship again',
383
+ headIlegivel: 'could not read HEAD after the merge',
384
+ confiraRepositorio: 'check the repository',
385
+ naoAncestral: (de, merge) => `the ${de} commit is not an ancestor of merge ${merge}`,
386
+ naoEmpurre: 'do not push: investigate the repository state',
387
+ semPrimeiroPai: (de, para) => `${de} is already an ancestor of ${para}, but git found no first-parent commit that brought it in`,
388
+ semPrimeiroPaiCorrecao: 'check the repository: ship_done needs the merge that delivered the thread',
389
+ passoJaIncorporado: (de, para, sha) => `(nothing to merge: ${de} is already an ancestor of ${para}, brought in by ${sha})`,
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`,
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`,
396
+ pushSemProva: (sha, ponta) => `ls-remote returned ${sha ?? '(nothing)'} and the local target is at ${ponta}: the push was not proven`,
397
+ pushSemProvaCorrecao: 'run ship again and check the remote',
398
+ ciNaoExigidoDetalhe: 'CI gate not required by the manifest',
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}`,
402
+ ciConsultaFalhou: 'GitHub query failed',
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}`,
408
+ ciSemCheck: (contexto) => `check ${contexto} not found on the commit`,
409
+ ciVerde: 'independent CHECK green on GitHub',
410
+ ciBloqueado: (contexto, conclusao) => `check ${contexto}: blocked (${conclusao})`,
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`,
415
+ usoRegistrarPr: 'usage: ork ship registrar-pr <thread-id> [--repo <owner/name> --pr <n>] | --todas [--remoto R] [--json] [--dry-run]',
416
+ ensaio: 'Dry run (--dry-run): nothing was written.',
417
+ nenhumaComMerge: 'No open thread with a ship(<thread>) merge on the base.',
418
+ linhaDoRegistro: (thread, acao, motivo) => ` ${thread.padEnd(20)} ${acao.padEnd(13)} ${motivo}`,
419
+ acoes: { 'registrou': 'recorded', 'registraria': 'would record', 'ja-registrada': 'already recorded', 'sem-merge': 'no merge',
420
+ 'recusada': 'refused', 'pulada': 'skipped' },
421
+ avisoDeDocs: (n) => `Warning: ${n} roadmap page(s) with \`estado.codigo\` other than "Mesclado" after the merge; ` +
422
+ 'the push to the base fails on docs.paridade.merge:',
423
+ docPendente: (id, arquivo, merge, thread, codigo) => ` ${id} (${arquivo}): merge ${merge} from ship(${thread}), estado.codigo "${codigo || 'empty'}"`,
424
+ docPendenteComando: (comando) => ` ${comando} (in a docs PR on top of the updated base)`,
425
+ registradas: (n) => `${n} delivery(ies) recorded. Close only this delivery through MASTER (a human score overrides):`,
426
+ registrariam: (n) => `${n} delivery(ies) would be recorded. To write them, run the same command without \`--dry-run\`.`,
427
+ prThreadFechada: 'thread already closed',
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`,
432
+ prJaTemShipDone: 'this delivery already has ship_done',
433
+ prForaDaPonta: (merge, remoto, base) => `merge ${merge} is not at the tip of ${remoto}/${base}`,
434
+ prSemCiVerde: (detalhe) => `no green CI on the PR head: ${detalhe}`,
435
+ prRegistraria: (merge) => `dry run: would record ship_done from merge ${merge} of the PR (nothing written)`,
436
+ prRegistrou: (merge) => `ship_done from merge ${merge} of the PR`,
437
+ prRepoNaoDeclarado: (repo) => `repository ${repo} is not declared in \`ci.external_repositories\` of \`orkastery.yaml\``,
438
+ prNumeroInvalido: (recebido) => `\`--pr\` must be the PR number, got ${recebido}`,
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'}`,
445
+ prExternoForaDaPonta: (merge, repo, base) => `merge ${merge} is not at the tip of ${repo}:${base}`,
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
+ },
469
+ publicar: {
470
+ uso: 'usage: ork ship publicar <thread-id> [--dry-run] [--remoto R] [--json]',
471
+ usoPista: 'usage: ork ship pista [<thread-id>] [--remoto R] [--json]',
472
+ semAutorizarPush: 'error: ork ship publicar does not accept --autorizar-push: it only publishes in the mode that already ' +
473
+ 'authorizes the push (#Auto and #Maestro); in the other modes, the push belongs to the owner, in their own terminal',
474
+ cabecalho: (dryRun, thread, tag) => `${dryRun ? 'ork ship publicar (--dry-run, nothing was published or written)' : 'ork ship publicar'}: thread ${thread} (${tag})`,
475
+ linhaBranch: (branch, sha) => ` branch ${branch} @ ${sha}`,
476
+ linhaRemoto: (remoto, antes, depois) => ` remote ${remoto}: ${depois} (before: ${antes})`,
477
+ linhaPushProvado: ' push PROVEN by ls-remote (same sha as HEAD)',
478
+ linhaPushSemProva: ' push without proof',
479
+ linhaPr: (n, criado, url, gitlab = false) => ` ${gitlab ? 'MR !' : 'PR #'}${n} ${criado ? 'opened now' : 'reused'}${url ? ` (${url})` : ''}`,
480
+ linhaCorpo: (corpo) => ` PR body ${corpo}`,
481
+ resultado: (acao) => `${acao}.`,
482
+ acoes: { 'publicou': 'PUBLISHED', 'publicaria': 'WOULD PUBLISH', 'ja-publicada': 'ALREADY PUBLISHED', 'recusada': 'REFUSED' },
483
+ threadInexistente: (thread, erro) => `thread ${thread} was not read in this project: ${erro}`,
484
+ threadInexistenteCorrecao: 'check the thread id (ork thread status <thread>)',
485
+ threadFechada: (thread) => `thread ${thread} is closed; nothing to publish`,
486
+ threadFechadaCorrecao: 'the new delivery goes in a new thread',
487
+ modoSemPush: (tag) => `the ${tag} mode asks for the owner's authorization to push; ork ship publicar only publishes in #Auto and #Maestro`,
488
+ modoSemPushCorrecao: (comando) => `the owner publishes from their own terminal: ${comando}`,
489
+ comandoDasDuasForjas: (gh, glab) => `on GitHub, ${gh}; on GitLab, ${glab}`,
490
+ conduzida: (sessao, fase) => `session ${sessao} is conducting the thread now (phase ${fase}); the branch may change in the middle of the publication`,
491
+ conduzidaCorrecao: (thread) => `publish after the end of the turn (ork conducao status ${thread})`,
492
+ semBranch: (branch) => `the thread branch ${branch} does not exist in this repository`,
493
+ semBranchCorrecao: (thread) => `check the thread worktree (ork worktree ensure ${thread})`,
494
+ branchEBase: (base) => `the thread branch is the base ${base}; publishing the base without a merge is the direct push that ork ship blocks`,
495
+ branchEBaseCorrecao: 'the delivery comes from a thread branch (ork/<thread>), never from the base',
496
+ semProduto: (branch, base) => `branch ${branch} has no commit outside ${base}; nothing to publish`,
497
+ semProdutoCorrecao: 'commit the thread work through the GO session before publishing',
498
+ checkSemCiclo: (tag) => `the ${tag} cycle has no CHECK`,
499
+ checkAusente: 'the thread docs/check.md was not written yet',
500
+ checkSemVeredito: 'docs/check.md does not have exactly one verdict',
501
+ checkOutroVeredito: (veredito) => `the CHECK verdict is ${veredito}`,
502
+ checkVelho: (sha) => `the CHECK with PASSOU is older than commit ${sha}`,
503
+ checkFeito: 'CHECK with verdict PASSOU after the last product commit',
504
+ comandoDoCheck: (thread) => `ork phase run ${thread} CHECK --prompt "<phase request>"`,
505
+ checkCorrecao: (thread) => `run the thread CHECK on HEAD and write the verdict PASSOU (ork phase run ${thread} CHECK --prompt "<phase request>")`,
506
+ verifyAusente: 'no ork verify written in the thread',
507
+ verifyReprovou: (sha, motivos) => `the last ork verify failed at commit ${sha} (${motivos})`,
508
+ verifyAntigo: (sha) => `the last green ork verify was at commit ${sha}, and HEAD changed after it beyond the bundle`,
509
+ verifyNoHead: (sha) => `green ork verify at HEAD ${sha}`,
510
+ verifySoBundle: (sha) => `green ork verify at commit ${sha}; after it, only the bundle`,
511
+ verifySoClaims: (sha) => `the last ork verify (commit ${sha}) ran only the claims, without the manifest build and test`,
512
+ verifyCorrecao: (thread) => `run ork verify ${thread} on HEAD and fix it before publishing`,
513
+ bundleAusente: (arquivo) => `the bundle ${arquivo} is not on HEAD`,
514
+ bundleInvalido: (arquivo) => `the bundle ${arquivo} on HEAD does not open as this thread's ork.ci-bundle/v1`,
515
+ bundleOutraBranch: (arquivo, branch) => `the bundle ${arquivo} on HEAD belongs to branch ${branch}`,
516
+ bundleVelho: (faltam, sobram) => `the bundle on HEAD is stale` +
517
+ `${faltam ? `: claims ${faltam} are missing` : ''}${sobram ? `${faltam ? ';' : ':'} claims ${sobram} are left over` : ''}`,
518
+ bundleMudou: (ids) => `the bundle on HEAD is stale: the command of claims ${ids} changed after it`,
519
+ bundleManifestoMudou: 'the bundle on HEAD is stale: the manifest verify commands changed after it',
520
+ bundleFeito: (n) => `bundle on HEAD with the ${n} active claims and their commands`,
521
+ bundleCorrecao: (thread) => `run ork ci prepare ${thread} in the worktree and commit the bundle as ci(${thread}): bundle`,
522
+ semRemoto: (remoto) => `remote ${remoto} is not configured in this repository`,
523
+ semRemotoCorrecao: 'configure the remote (git remote add) or give another one in --remoto',
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`,
525
+ semForjaCorrecao: 'publish the branch and open the merge request through the remote forge',
526
+ lsRemoteFalhou: (remoto, erro) => `git ls-remote ${remoto} failed: ${erro}`,
527
+ prsFalharam: (erro) => `the branch PR list failed: ${erro}`,
528
+ redeCorrecao: 'check the network and the gh login (gh auth status) and run it again',
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`,
531
+ registreAEntrega: (thread) => `record the delivery: ork ship registrar-pr ${thread}`,
532
+ remotoDivergiu: (remoto, branch, sha) => `remote ${remoto} has branch ${branch} at ${sha}, with a commit the local branch does not have`,
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`,
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)`,
536
+ pushFalhou: (remoto, branch, erro) => `the push of ${branch} to ${remoto} failed: ${erro}`,
537
+ pushSemProva: (remota, head) => `ls-remote returned ${remota ?? '(nothing)'} and HEAD is at ${head}: the push was not proven`,
538
+ pushSemProvaCorrecao: (thread) => `check the remote and run ork ship publicar ${thread} again`,
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'}.`,
541
+ prSemReleitura: 'the PR did not show up when the list was read again',
542
+ prFalhou: (sha, erro) => `the branch was published and proven at HEAD ${sha}, but the PR did not open: ${erro}`,
543
+ prFalhouCorrecao: (thread) => `check the gh login and run ork ship publicar ${thread} again (the push is already proven)`,
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'}`,
550
+ remotoNaoLido: (remoto) => `git ls-remote ${remoto} did not answer`,
551
+ branchPublicada: (sha) => `branch published at HEAD ${sha}`,
552
+ branchNaoPublicada: 'branch not published yet',
553
+ commitsSemPush: (remota, head) => `the remote is at ${remota} and HEAD at ${head}: there are commits without push`,
554
+ prsNaoLidos: (erro) => `PRs not read: ${erro}`,
555
+ prsCortados: (limite) => `the open PR list was cut at the ${limite} newest: the branch PR was not read`,
556
+ branchSemConferir: 'the branch was left unchecked in this forge read: its PR was not read',
557
+ prFechado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} was closed without merge`,
558
+ semPr: 'no PR for the branch',
559
+ ciSemPr: 'without a PR, CI does not run',
560
+ ciNaoExigido: 'CI not required by the manifest',
561
+ conflitoSemPr: 'without a PR, no conflict to measure',
562
+ prMesclado: (n, gitlab = false) => `${rotuloDoPedido(n, gitlab)} merged`,
563
+ ciDoMesclado: 'PR merged; ork ship registrar-pr checks the CI on the head',
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`,
567
+ ciVerde: (contexto, sha) => `check ${contexto} green on head ${sha}`,
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`,
571
+ semConflito: 'no conflict with the base',
572
+ conflitoNaoCalculado: 'GitHub has not computed the merge with the base yet',
573
+ entregue: 'delivered: ship_done in the ledger',
574
+ mergeSemRegistro: (sha) => `merge ${sha} on the base, without ship_done`,
575
+ semShipDone: 'no ship_done yet',
576
+ proximoEntregue: 'delivered; the MASTER closes the thread',
577
+ proximoRegistrar: 'merged on the base: record the delivery',
578
+ proximoConduzida: (sessao) => `session ${sessao} is conducting the thread now; the delivery waits for the end of the turn`,
579
+ proximoPublicarNoPr: (n, gitlab = false) => `publish the new commits to ${rotuloDoPedido(n, gitlab)}`,
580
+ proximoPublicar: 'publish the branch and open the PR',
581
+ proximoDoDono: (thread, tag) => `the ${tag} mode of ${thread} asks for your push authorization: publish from your terminal`,
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`,
587
+ cabecalhoPista: (quando, remoto, base) => `Delivery lane (read at ${quando}, base ${remoto}/${base})`,
588
+ semPistas: 'No open thread in delivery.',
589
+ remotoNaoRespondeu: (remoto) => `Warning: git ls-remote ${remoto} did not answer; the branch step was left unread.`,
590
+ prsNaoResponderam: (erro) => `Warning: the PRs were not read (${erro}); PR, CI and conflict were left unread.`,
591
+ linhaDaThread: (thread, tag, branch) => ` ${thread} ${tag} ${branch}`,
592
+ nomeDaEtapa: (id) => ({ check: 'CHECK', verify: 'verify', bundle: 'bundle', branch: 'branch', pr: 'PR', ci: 'CI',
593
+ conflito: 'conflict', entrega: 'delivery' }[id] ?? id),
594
+ marcaDaEtapa: (estado) => ({ 'feita': 'ok', 'pendente': '...', 'falhou': 'X', 'nao-lida': '?', 'nao-se-aplica': '-' }[estado] ?? estado),
595
+ linhaDoProximo: (texto, comando) => ` next: ${texto}${comando ? ` (${comando})` : ''}`,
596
+ },
597
+ };