@orkastery/cli 0.5.3 → 0.5.6

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 (212) hide show
  1. package/adapters/claude-code/README.md +158 -0
  2. package/adapters/claude-code/mods/autoridade.json +56 -0
  3. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  4. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  5. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  6. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  7. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  8. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  9. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  10. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  11. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  12. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  13. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  14. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  15. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  16. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  17. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  18. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  19. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  20. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  21. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  22. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  23. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  24. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  25. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  26. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  27. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  28. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  29. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +117 -0
  30. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  31. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  32. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  33. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  34. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  35. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  36. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  37. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  38. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  39. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  40. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  41. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  42. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  43. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  44. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  45. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  46. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  47. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  48. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  49. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  50. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  51. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  52. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  53. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  54. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  55. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  56. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  57. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  58. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  59. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  60. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  61. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  62. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  63. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  64. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  65. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  66. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  67. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  68. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  69. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  70. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  71. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  72. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  73. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  74. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  75. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  76. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  77. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  78. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  79. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +1 -1
  80. package/adapters/openclaw/README.md +2 -1
  81. package/adapters/openclaw/openclaw.plugin.json +1 -1
  82. package/adapters/openclaw/package.json +1 -1
  83. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  84. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  85. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  86. package/assets/docs-en/produto/README.md +14 -0
  87. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  88. package/assets/docs-en/roadmap/README.md +14 -0
  89. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  90. package/dist/adapters/claude-bg.js +77 -13
  91. package/dist/adapters/codex.js +10 -1
  92. package/dist/agents-md.js +24 -15
  93. package/dist/auditrun.js +17 -2
  94. package/dist/board.js +4 -3
  95. package/dist/branch-de-estado.js +23 -1
  96. package/dist/catalogo.js +33 -0
  97. package/dist/ci.js +13 -7
  98. package/dist/claims-conferir.js +342 -0
  99. package/dist/claims.js +3 -1
  100. package/dist/company-brain-client.js +36 -1
  101. package/dist/company-brain-journal.js +2 -1
  102. package/dist/company-brain-migration.js +36 -1
  103. package/dist/conducao-sentinela.js +388 -0
  104. package/dist/conducao-texto.js +12 -18
  105. package/dist/conducao.js +122 -30
  106. package/dist/conhecimento.js +490 -0
  107. package/dist/docs.js +22 -8
  108. package/dist/doctor-pulse-cron.js +182 -27
  109. package/dist/doctor-rede.js +18 -17
  110. package/dist/doctor.js +115 -111
  111. package/dist/entrega-pr.js +22 -21
  112. package/dist/escopo-escrita.js +10 -1
  113. package/dist/estado-thread.js +23 -1
  114. package/dist/experiencia-instalacao.js +45 -25
  115. package/dist/fabrica-batida.js +310 -0
  116. package/dist/fabrica-estado.js +38 -8
  117. package/dist/fabrica-publicar.js +3 -1
  118. package/dist/fila-pesada.js +444 -0
  119. package/dist/fix.js +3 -2
  120. package/dist/forja.js +1 -1
  121. package/dist/gates.js +3 -28
  122. package/dist/handoff.js +10 -6
  123. package/dist/hitl-local-receipt.js +2 -0
  124. package/dist/hitl-resumo.js +29 -3
  125. package/dist/hitl-tempo-parado.js +4 -4
  126. package/dist/hitl.js +29 -33
  127. package/dist/horario.js +14 -7
  128. package/dist/hosts.js +52 -1
  129. package/dist/impedimento.js +108 -14
  130. package/dist/index.js +623 -521
  131. package/dist/indice.js +7 -1
  132. package/dist/init.js +43 -47
  133. package/dist/instabilidade.js +144 -0
  134. package/dist/integracoes-locais.js +2 -0
  135. package/dist/intelligence-graph-cli.js +92 -21
  136. package/dist/intelligence-graph-contexto.js +56 -17
  137. package/dist/intelligence-graph-contract.js +2 -1
  138. package/dist/intelligence-graph-extract-md.js +56 -4
  139. package/dist/intelligence-graph-extract-ts.js +71 -3
  140. package/dist/intelligence-graph-query.js +66 -19
  141. package/dist/ledger.js +15 -1
  142. package/dist/liveness.js +6 -3
  143. package/dist/locale-ajuda.js +761 -0
  144. package/dist/locale-gerados.js +160 -0
  145. package/dist/locale-master.js +99 -0
  146. package/dist/locale-onboarding.js +92 -0
  147. package/dist/locale-phase.js +151 -0
  148. package/dist/locale-pulse.js +211 -0
  149. package/dist/locale-retry.js +385 -0
  150. package/dist/locale-roadmap.js +102 -0
  151. package/dist/locale-ship.js +494 -0
  152. package/dist/locale-thread.js +277 -0
  153. package/dist/locale-verify.js +125 -0
  154. package/dist/locale.js +714 -0
  155. package/dist/manifest.js +129 -3
  156. package/dist/maquina.js +23 -4
  157. package/dist/master-digest.js +6 -1
  158. package/dist/master-nota.js +4 -6
  159. package/dist/master.js +21 -24
  160. package/dist/mcp-artifacts.js +11 -2
  161. package/dist/mcp-git.js +23 -6
  162. package/dist/mcp-grafo.js +7 -4
  163. package/dist/mcp-server.js +8 -2
  164. package/dist/mcp-ship.js +3 -1
  165. package/dist/mcp-verify.js +6 -1
  166. package/dist/modos.js +3 -6
  167. package/dist/network-roadmap.js +5 -2
  168. package/dist/noctum-arco.js +911 -0
  169. package/dist/noctum-capacidade.js +141 -0
  170. package/dist/noctum-envelope.js +810 -0
  171. package/dist/noctum-execucao.js +304 -0
  172. package/dist/noctum-fila.js +280 -0
  173. package/dist/ocupacao.js +29 -2
  174. package/dist/onboarding.js +40 -21
  175. package/dist/orkmind.js +9 -2
  176. package/dist/orquestracao.js +13 -12
  177. package/dist/parado-no-condutor.js +34 -9
  178. package/dist/phase.js +94 -39
  179. package/dist/policies.js +4 -4
  180. package/dist/portfolio.js +4 -2
  181. package/dist/postura-local.js +234 -0
  182. package/dist/preflight.js +11 -10
  183. package/dist/procedencia.js +225 -0
  184. package/dist/projeto-alvo.js +127 -4
  185. package/dist/prompts.js +6 -2
  186. package/dist/pulse-delivery.js +13 -2
  187. package/dist/pulse.js +52 -19
  188. package/dist/ratelimit.js +4 -2
  189. package/dist/redacao-saida.js +63 -0
  190. package/dist/rede-status.js +3 -2
  191. package/dist/retry.js +232 -148
  192. package/dist/roadmap-reservas.js +20 -3
  193. package/dist/roadmap-status.js +129 -33
  194. package/dist/runtime-context.js +181 -3
  195. package/dist/runtimes.js +2 -1
  196. package/dist/session-events.js +7 -3
  197. package/dist/session-watcher-claude.js +7 -1
  198. package/dist/session-watcher.js +185 -33
  199. package/dist/sessoes-contas.js +1 -1
  200. package/dist/ship-publicar.js +800 -0
  201. package/dist/ship.js +84 -81
  202. package/dist/steal.js +77 -0
  203. package/dist/thread-close.js +3 -2
  204. package/dist/thread.js +153 -82
  205. package/dist/util.js +8 -1
  206. package/dist/verify.js +141 -52
  207. package/dist/vida-da-thread.js +254 -0
  208. package/dist/worktree-local.js +165 -0
  209. package/dist/worktree.js +20 -0
  210. package/dist/yaml.js +27 -8
  211. package/package.json +1 -1
  212. package/schemas/code-artifact-graph.v1.schema.json +2 -1
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2b: a familia `pulse` do catalogo de mensagens (`ork pulse` em texto; o `--json` nao muda).
4
+ * O pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * O pulse junta dado de muitas fontes. Sai como veio: a pergunta e as opcoes de um pedido HITL, a tela de
7
+ * uma sessao, o detalhe e a correcao que outro processo gravou num gate do ledger, o codigo e o erro de um
8
+ * diagnostico, e o proximo passo de uma thread parada no condutor (G5 da F2b). O que o proprio processo monta
9
+ * (a pergunta de fase sem heartbeat, as paradas do monitor, o estado da sessao no radar, o detalhe da consulta
10
+ * do runtime e a descricao de reserva do motivo) nasce em pt-BR (o `--json` o guarda) e sai remontado (G2).
11
+ * A descricao por motivo tipado tem a fonte aqui: `DESCRICAO_DO_MOTIVO` (gates.ts) le o pt-BR.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.PULSE_EN = exports.PULSE_PT_BR = void 0;
15
+ /** A classe da sessao no radar (`ClasseDeSessao`) e a da fase orfa, pelo id; `hitl` e `thread` sao iguais. */
16
+ const CLASSES_EN = {
17
+ abandonada: 'abandoned', falha: 'failed', trabalhando: 'working', concluida: 'done', interrompida: 'stopped',
18
+ interativa: 'interactive', desconhecida: 'unknown', fase_orfa: 'orphan phase', score_pendente: 'pending score',
19
+ };
20
+ /** As alternativas do pedido curto do impedimento do despacho (`impedimento.ts`), pelo texto que ele grava. */
21
+ const ALTERNATIVAS_DO_IMPEDIMENTO_EN = {
22
+ 'Rodei o comando': 'I ran the command', 'Trocar o runtime do bloco': 'Switch the block runtime', 'Deixar parada': 'Leave it stopped',
23
+ };
24
+ exports.PULSE_PT_BR = {
25
+ cabecalho: (contrato, quando) => `Pulse (${contrato}) ${quando}`,
26
+ precisaDeHumano: (n) => `Precisa de humano agora: ${n}`,
27
+ semNota: (n) => `${n} entrega(s) sem nota, aceitas por padrão com registro`,
28
+ diagnostico: (detalhe) => `[diagnostico] ${detalhe}`,
29
+ consultaIncompleta: (detalhe) => `[consulta incompleta] ${detalhe}`,
30
+ item: (quem, classe, minutos) => `${quem} [${classe}] ${minutos} min`,
31
+ /** A classe do item (`ItemPulse.classe`), dado do `--json`: o ingles a traduz pelo id na impressao (D4). */
32
+ classe: (classe) => classe,
33
+ desconhecido: 'desconhecido',
34
+ menosDeUm: 'menos de 1',
35
+ opcao: (opcao) => ` opção: ${opcao}`,
36
+ recomendacao: (texto) => `Recomendação: ${texto}`,
37
+ responder: (comando) => `Responder: ${comando}`,
38
+ log: (linha) => ` log: ${linha}`,
39
+ conduzidas: (n) => `Conduzidas agora: ${n}`,
40
+ conducao: (thread, linha) => `${thread}: ${linha}`,
41
+ paradoNoCondutor: (n) => `Parado no condutor: ${n}`,
42
+ /** A linha do condutor (hitl-resumo.ts): a mesma frase no pulse, no resumo e no status do roadmap. */
43
+ linhaDoCondutor: (thread, desde, proximoPasso) => `${thread} parado no condutor desde ${desde}: ${proximoPasso}`,
44
+ hitlDeConducao: (abertas, mediana) => `HITL de condução: ${abertas} aberta(s); ${mediana}`,
45
+ /** hitl-tempo-parado.ts: a mediana dos 7 dias e a pergunta de conducao parada. */
46
+ medianaSemResposta: 'mediana de 7 dias sem resposta medida',
47
+ mediana: (minutos, dentro, respondidos) => `mediana de 7 dias ${minutos} (${dentro ? 'dentro' : 'acima'} da meta de 5 min, ${respondidos} resposta(s))`,
48
+ perguntaParada: (thread, fase, ha, desde) => `${thread} (${fase}) parada há ${ha}, desde ${desde}`,
49
+ automaticas: (n) => `Ações automáticas pendentes: ${n}`,
50
+ automatica: (thread, motivo, comando) => `${thread}: ${motivo}; ${comando}`,
51
+ // pulse.ts: o que o proprio pulse monta (vai ao --json)
52
+ semHeartbeat: (fase, desde) => `Fase ${fase} sem heartbeat desde ${desde}.`,
53
+ semRuntime: 'runtime não consultado por --sem-runtime',
54
+ telasAdiadas: (n) => `radar.orcamento: ${n} tela(s) de sessão ficaram para a próxima varredura`,
55
+ // orquestracao.ts: as paradas que o monitor monta (pergunta e correcao do item do pulse)
56
+ pausaTrabalhando: (sessao) => `a sessao ${sessao} do bloco ainda esta trabalhando no runtime: a pausa chega quando ela terminar`,
57
+ pausaBloqueada: (sessao) => `a sessao ${sessao} do bloco esta BLOQUEADA no runtime esperando acao humana (prompt, permissao ou credencial): veja \`ork sessions hitl\``,
58
+ blocoFechado: (fase, sobre) => `bloco fechado em ${fase}: espera o veredito humano sobre ${sobre}`,
59
+ aPausaDoBloco: 'a pausa do bloco',
60
+ responderSessao: (curta, sessao) => `ork sessions logs ${curta} para ver o que a sessao pede, e claude attach ${sessao} para responder`,
61
+ threadPausada: (fase) => `thread carimbada como pausada na fase ${fase}`,
62
+ naFilaDoLease: (nome, atras, colide) => `na fila de ${nome}, atras da thread ${atras} (colide com ${colide})`,
63
+ espereOLease: (atras, regiao, dono) => `espere a thread ${atras} liberar (ork lease release ${regiao} --thread ${dono}), ou reduza a regiao pedida`,
64
+ /** `quando` e o ISO de `liberaEm`: o JSON do monitor o guarda cru e `linhaDaParada` o localiza. */
65
+ naFilaDeRateLimit: (id, falta, quando, estimada) => `pedido ${id} na fila de rate limit, libera ${falta} (${quando}, ${estimada ? 'janela estimada' : 'hora dita pelo runtime'})`,
66
+ // hitl.ts: o estado da sessao no radar (vira a pergunta do item quando a sessao nao pergunta nada)
67
+ sessao: { blocked: 'sessao parada esperando acao humana (prompt, permissao ou credencial)',
68
+ failed: 'sessao terminou em erro: alguem decide entre retomar, corrigir ou abandonar',
69
+ working: 'sessao em execucao', done: 'sessao concluiu', stopped: 'sessao parada por decisao humana (`claude stop`)',
70
+ idle: 'sessao interativa ociosa, conduzida por um humano no terminal' },
71
+ sessaoSemEstado: 'runtime nao informou estado desta sessao: tratada como possivel parada',
72
+ sessaoEstadoForaDoCatalogo: (estado) => `estado "${estado}" nao esta no catalogo do ork: tratado como possivel parada`,
73
+ // a consulta do runtime (claude-bg.ts e hitl.ts): o detalhe do pulse quando ela falha
74
+ adapterIndisponivel: 'runtime adapter indisponivel nesta maquina (`claude` fora do PATH)',
75
+ claudeForaDoPath: 'binário `claude` fora do PATH',
76
+ claudeAgentsFalhou: (codigo) => `claude agents falhou (código ${codigo})`,
77
+ // hitl.ts (`recomendarPara`): a recomendacao unica que o radar monta para cada tipo de parada
78
+ recomendacaoDoRadar: {
79
+ abandonada: 'nao responda: o job ja saiu. Confira o que ficou na worktree da sessao e redespache so o resto do trabalho.',
80
+ falha: (id) => `leia \`ork sessions logs ${id}\` e decida entre retomar, corrigir a causa ou abandonar a sessao.`,
81
+ desconhecida: (id) => `estado fora do catalogo: confirme no \`ork sessions logs ${id}\` se a sessao esta mesmo parada.`,
82
+ credencial: (id) => `entregue o segredo agora (\`claude attach ${id}\`) para nao segurar a entrega; ` +
83
+ 'se este mesmo bloqueio ja se repetiu, troque por credencial de automacao e ele nao volta.',
84
+ permissao: (id) => `responda o prompt (\`claude attach ${id}\`); se o comando e rotineiro nesse projeto, ` +
85
+ 'coloque-o na allowlist de permissoes para nao parar de novo pelo mesmo motivo.',
86
+ pergunta: (id) => `abra a sessao (\`claude attach ${id}\`) e escolha entre as opcoes que ela listou.`,
87
+ outra: (id) => `veja o que a sessao pede com \`ork sessions logs ${id}\` antes de responder.`,
88
+ },
89
+ /** O texto da alternativa do impedimento do despacho (RM-055), como `impedimento.ts` o grava; o ingles traduz. */
90
+ alternativaDoImpedimento: (texto) => texto,
91
+ // board.ts: a correcao das vagas que o escalonador devolve e o pulse mostra nas acoes automaticas
92
+ vagaStaleCorrecao: (thread, fase) => `redespache com ork phase run ${thread} --fase ${fase}, ou feche com ork master ${thread}`,
93
+ limiteCorrecao: 'espere uma thread liberar, ou suba concurrency.max_parallel_threads no orkastery.yaml',
94
+ /** A descricao de cada motivo tipado: a fonte de `DESCRICAO_DO_MOTIVO` (reserva do detalhe da parada). */
95
+ motivos: {
96
+ 'artifact.missing': 'artefato exigido pela fase nao existe no disco',
97
+ 'claims.failed': 'alegacao verificavel reprovou na reexecucao no HEAD real',
98
+ 'claims.unverifiable': 'alegacao sem comando de verificacao declarado',
99
+ 'policy.violation': 'policy do manifesto com severidade block foi violada',
100
+ 'runtime.autoconferencia': 'o CHECK foi despachado no mesmo runtime que fez o GO, e a thread exige validacao cruzada',
101
+ 'verify.regression': 'comando que passava na baseline falha agora',
102
+ 'verify.failed': 'comando de verificacao falhou (sem baseline para separar divida pre-existente)',
103
+ 'verify.timeout': 'comando de verificacao estourou o prazo antes de terminar: nao ha veredito sobre ele',
104
+ 'verify.sem-veredito': 'a rodada nao produziu veredito valido: comando que nao chegou a rodar, ou produto alterado entre o preparo e o fim',
105
+ 'ci.failed': 'CHECK independente ausente, pendente ou reprovado no commit candidato',
106
+ 'runtime.unavailable': 'runtime adapter indisponivel para o despacho',
107
+ 'runtime.silencio': 'fase despachada sem heartbeat dentro do limite de liveness',
108
+ 'runtime.rate-limited': 'o runtime bateu o limite de uso da assinatura e a fase morreu antes de terminar (bloco B3: entra na fila duravel e e retomada na janela seguinte)',
109
+ 'runtime.quota-exhausted': 'a cota ou os creditos da conta do runtime acabaram (I-33: o perfil sai do rodizio e a fase segue em outro perfil, outro runtime ou na fila)',
110
+ 'runtime.auth-missing': 'a conta do runtime nao esta autenticada (I-33: o perfil nunca recebe despacho ate o login ser refeito pelo proprio CLI)',
111
+ 'runtime.model-unavailable': 'o modelo pedido nao existe ou a conta nao tem acesso a ele (RM-037: o perfil segue no rodizio e a fase vai a outro perfil com o mesmo modelo ou ao fallback do bloco)',
112
+ 'runtime.profile-invalid': 'o perfil pedido no despacho (--perfil) nao existe no store ou e de outro runtime (RM-056: o despacho nunca troca de perfil sozinho)',
113
+ 'runtime.workspace-untrusted': 'o runtime nao confia no diretorio da worktree e recusou o despacho (RM-055: so o dono aceita a confianca no terminal; depois o ork re-despacha o mesmo prompt)',
114
+ 'runtime.consent-pending': 'o runtime espera o dono aceitar termos novos e recusou o despacho (RM-055: so o dono aceita no terminal; depois o ork re-despacha o mesmo prompt)',
115
+ 'cost.violation': 'o despacho seria redirecionado para provider pago (violacao de custo: e o unico motivo que NUNCA recebe retry automatico)',
116
+ 'tree.blocked': 'a arvore de destino nao esta disponivel para o merge (branch em check-out com alteracao nao commitada, ou worktree que nao pode ser montada)',
117
+ 'lease.busy': 'lease ocupado por outra thread',
118
+ 'lease.resume-unavailable': 'retomada indisponivel; libere o lease explicitamente com --forcar',
119
+ 'conducao.em-andamento': 'outra conducao ja executa na worktree da thread (I-36): o pedido foi recusado com quem conduz e as tres acoes (esperar, acompanhar, assumir)',
120
+ 'hitl.formato': 'o pedido HITL saiu fora do formato obrigatorio (pergunta em uma frase, de 3 a 5 alternativas rotuladas com consequencia, exatamente uma com o selo Recomendacao e o porque, corpo em lista; texto livre so com dependencia tecnica tipada)',
121
+ 'human.pending': 'gate humano do modo de conducao ainda nao autorizou',
122
+ },
123
+ };
124
+ exports.PULSE_EN = {
125
+ cabecalho: (contrato, quando) => `Pulse (${contrato}) ${quando}`,
126
+ precisaDeHumano: (n) => `Needs a human now: ${n}`,
127
+ semNota: (n) => `${n} delivery(ies) without a score, accepted by default with a record`,
128
+ diagnostico: (detalhe) => `[diagnostic] ${detalhe}`,
129
+ consultaIncompleta: (detalhe) => `[incomplete query] ${detalhe}`,
130
+ item: (quem, classe, minutos) => `${quem} [${classe}] ${minutos} min`,
131
+ classe: (classe) => CLASSES_EN[classe] ?? classe,
132
+ desconhecido: 'unknown',
133
+ menosDeUm: 'less than 1',
134
+ opcao: (opcao) => ` option: ${opcao}`,
135
+ recomendacao: (texto) => `Recommendation: ${texto}`,
136
+ responder: (comando) => `Reply: ${comando}`,
137
+ log: (linha) => ` log: ${linha}`,
138
+ conduzidas: (n) => `Conducted now: ${n}`,
139
+ conducao: (thread, linha) => `${thread}: ${linha}`,
140
+ paradoNoCondutor: (n) => `Waiting on the conductor: ${n}`,
141
+ linhaDoCondutor: (thread, desde, proximoPasso) => `${thread} waiting on the conductor since ${desde}: ${proximoPasso}`,
142
+ hitlDeConducao: (abertas, mediana) => `Conduction HITL: ${abertas} open; ${mediana}`,
143
+ medianaSemResposta: '7-day median with no measured answer',
144
+ mediana: (minutos, dentro, respondidos) => `7-day median ${minutos} (${dentro ? 'within' : 'above'} the 5 min target, ${respondidos} answer(s))`,
145
+ perguntaParada: (thread, fase, ha, desde) => `${thread} (${fase}) stopped for ${ha}, since ${desde}`,
146
+ automaticas: (n) => `Pending automatic actions: ${n}`,
147
+ automatica: (thread, motivo, comando) => `${thread}: ${motivo}; ${comando}`,
148
+ semHeartbeat: (fase, desde) => `Phase ${fase} with no heartbeat since ${desde}.`,
149
+ semRuntime: 'runtime not queried because of `--sem-runtime`',
150
+ telasAdiadas: (n) => `radar.orcamento: ${n} session screen(s) left for the next scan`,
151
+ pausaTrabalhando: (sessao) => `session ${sessao} of the block is still working in the runtime: the pause comes when it finishes`,
152
+ pausaBloqueada: (sessao) => `session ${sessao} of the block is BLOCKED in the runtime waiting for human action (prompt, permission or credential): see \`ork sessions hitl\``,
153
+ blocoFechado: (fase, sobre) => `block closed at ${fase}: waiting for the human verdict on ${sobre}`,
154
+ aPausaDoBloco: 'the block pause',
155
+ responderSessao: (curta, sessao) => `\`ork sessions logs ${curta}\` to see what the session asks, and \`claude attach ${sessao}\` to answer`,
156
+ threadPausada: (fase) => `thread marked as paused in phase ${fase}`,
157
+ naFilaDoLease: (nome, atras, colide) => `in the ${nome} queue, behind thread ${atras} (collides with ${colide})`,
158
+ espereOLease: (atras, regiao, dono) => `wait for thread ${atras} to release it (\`ork lease release ${regiao} --thread ${dono}\`), or narrow the requested region`,
159
+ naFilaDeRateLimit: (id, falta, quando, estimada) => `request ${id} in the rate limit queue, released ${falta} (${quando}, ${estimada ? 'estimated window' : 'time given by the runtime'})`,
160
+ sessao: { blocked: 'session stopped waiting for human action (prompt, permission or credential)',
161
+ failed: 'session ended in an error: someone decides whether to resume, fix or drop it',
162
+ working: 'session running', done: 'session finished', stopped: 'session stopped by a human decision (`claude stop`)',
163
+ idle: 'idle interactive session, driven by a human in the terminal' },
164
+ sessaoSemEstado: 'the runtime did not report a state for this session: treated as possibly stopped',
165
+ sessaoEstadoForaDoCatalogo: (estado) => `state "${estado}" is not in the ork catalog: treated as possibly stopped`,
166
+ adapterIndisponivel: 'runtime adapter unavailable on this machine (`claude` not on PATH)',
167
+ claudeForaDoPath: '`claude` binary not on PATH',
168
+ claudeAgentsFalhou: (codigo) => `\`claude agents\` failed (exit ${codigo})`,
169
+ recomendacaoDoRadar: {
170
+ abandonada: 'do not answer: the job has already exited. Check what was left in the session worktree and re-dispatch only the rest of the work.',
171
+ falha: (id) => `read \`ork sessions logs ${id}\` and decide whether to resume, fix the cause or drop the session.`,
172
+ desconhecida: (id) => `state not in the catalog: confirm in \`ork sessions logs ${id}\` that the session is really stopped.`,
173
+ credencial: (id) => `hand over the secret now (\`claude attach ${id}\`) so the delivery is not held up; ` +
174
+ 'if this same block has happened before, switch to an automation credential and it will not come back.',
175
+ permissao: (id) => `answer the prompt (\`claude attach ${id}\`); if the command is routine in this project, ` +
176
+ 'add it to the permissions allowlist so it does not stop again for the same reason.',
177
+ pergunta: (id) => `open the session (\`claude attach ${id}\`) and choose among the options it listed.`,
178
+ outra: (id) => `see what the session asks with \`ork sessions logs ${id}\` before answering.`,
179
+ },
180
+ alternativaDoImpedimento: (texto) => ALTERNATIVAS_DO_IMPEDIMENTO_EN[texto] ?? texto,
181
+ vagaStaleCorrecao: (thread, fase) => `re-dispatch with \`ork phase run ${thread} --fase ${fase}\`, or close it with \`ork master ${thread}\``,
182
+ limiteCorrecao: 'wait for a thread to free its slot, or raise `concurrency.max_parallel_threads` in `orkastery.yaml`',
183
+ motivos: {
184
+ 'artifact.missing': 'an artifact the phase requires does not exist on disk',
185
+ 'claims.failed': 'a verifiable claim failed when rerun on the real HEAD',
186
+ 'claims.unverifiable': 'a claim with no verification command declared',
187
+ 'policy.violation': 'a manifest policy with block severity was violated',
188
+ 'runtime.autoconferencia': 'CHECK was dispatched on the same runtime that did GO, and the thread requires cross-validation',
189
+ 'verify.regression': 'a command that passed in the baseline fails now',
190
+ 'verify.failed': 'a verification command failed (no baseline to tell existing debt apart)',
191
+ 'verify.timeout': 'a verification command ran past its deadline before finishing: there is no verdict on it',
192
+ 'verify.sem-veredito': 'the run produced no valid verdict: a command that never ran, or a product changed between prepare and the end',
193
+ 'ci.failed': 'independent CHECK missing, pending or failed on the candidate commit',
194
+ 'runtime.unavailable': 'runtime adapter unavailable for the dispatch',
195
+ 'runtime.silencio': 'phase dispatched with no heartbeat within the liveness limit',
196
+ 'runtime.rate-limited': 'the runtime hit the subscription usage limit and the phase died before finishing (block B3: it enters the durable queue and resumes in the next window)',
197
+ 'runtime.quota-exhausted': 'the quota or credits of the runtime account ran out (I-33: the profile leaves the rotation and the phase goes on in another profile, another runtime or the queue)',
198
+ 'runtime.auth-missing': 'the runtime account is not authenticated (I-33: the profile gets no dispatch until the login is redone through the CLI itself)',
199
+ 'runtime.model-unavailable': 'the requested model does not exist or the account has no access to it (RM-037: the profile stays in the rotation and the phase goes to another profile with the same model or to the block fallback)',
200
+ 'runtime.profile-invalid': 'the profile requested in the dispatch (`--perfil`) does not exist in the store or belongs to another runtime (RM-056: the dispatch never switches profiles on its own)',
201
+ 'runtime.workspace-untrusted': 'the runtime does not trust the worktree directory and refused the dispatch (RM-055: only the owner accepts trust in the terminal; then ork dispatches the same prompt again)',
202
+ 'runtime.consent-pending': 'the runtime waits for the owner to accept new terms and refused the dispatch (RM-055: only the owner accepts in the terminal; then ork dispatches the same prompt again)',
203
+ 'cost.violation': 'the dispatch would be redirected to a paid provider (a cost violation: the only reason that NEVER gets an automatic retry)',
204
+ 'tree.blocked': 'the target tree is not available for the merge (branch checked out with uncommitted changes, or a worktree that cannot be set up)',
205
+ 'lease.busy': 'lease held by another thread',
206
+ 'lease.resume-unavailable': 'resume unavailable; release the lease explicitly with `--forcar`',
207
+ 'conducao.em-andamento': 'another conduction already runs on the thread worktree (I-36): the request was refused with who conducts and the three actions (wait, follow, take over)',
208
+ 'hitl.formato': 'the HITL request came out of the required format (question in one sentence, 3 to 5 labeled alternatives with a consequence each, exactly one with the Recommendation seal and the reason, body as a list; free text only with a typed technical dependency)',
209
+ 'human.pending': 'the human gate of the conduction mode has not authorized yet',
210
+ },
211
+ };
@@ -0,0 +1,385 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2b: a familia `retry` do catalogo de mensagens (`ork retry plan` e `ork retry run`). O
4
+ * pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * A politica por motivo tipado (`porque` e `correcao`) tem a fonte aqui: `POLITICA_DE_RETRY` le o pt-BR, e
7
+ * o `--json` de `retry plan` e de `retry policy` nao muda. A razao do plano e o detalhe da execucao vao ao
8
+ * ledger: o comando os monta em pt-BR, e so a impressao os remonta no locale (G2 da F2b). Motivo, acao,
9
+ * bloqueio e comando saem iguais nas duas linguas (G4): o condutor procura `auth-missing` e
10
+ * `quota-exhausted` na saida de `ork retry run`.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RETRY_EN = exports.RETRY_PT_BR = void 0;
14
+ exports.RETRY_PT_BR = {
15
+ /** `porque` e `correcao` de cada motivo tipado: a fonte de `POLITICA_DE_RETRY`. */
16
+ politica: {
17
+ 'artifact.missing': {
18
+ porque: 'o artefato exigido pela fase nao existe: a fase precisa de spec dirigida do que gravar, nao de repeticao cega do mesmo prompt',
19
+ correcao: 'ork fix open <thread> abre a rodada com a spec exata',
20
+ },
21
+ 'claims.failed': {
22
+ porque: 'a alegacao reprovou na reexecucao no HEAD real: reexecutar a fase igual reproduz a mesma mentira; o que resolve e GO-FIX com a claim e o comando exatos',
23
+ correcao: 'ork fix open <thread> e depois ork fix reverify <thread>',
24
+ },
25
+ 'claims.unverifiable': {
26
+ porque: 'alegacao sem comando de verificacao vira correcao tipo A: anexar o comando (ou retirar a alegacao com motivo) e uma linha, nao um GO inteiro',
27
+ correcao: 'ork claims verificar <thread> <claim> --comando "<comando>"',
28
+ },
29
+ 'policy.violation': {
30
+ porque: 'policy com severidade block reprova em qualquer modo: reexecutar sozinho seria a maquina revogando a policy do manifesto',
31
+ correcao: 'corrija a violacao no pedido/manifesto; policy block nao se resolve por repeticao',
32
+ },
33
+ 'runtime.autoconferencia': {
34
+ porque: 'repetir o despacho no MESMO runtime daria o mesmo resultado: o que falta nao e tentativa, e um validador que nao seja quem executou. Escolher o outro runtime e decisao de conducao, nao retry',
35
+ correcao: 'despache o CHECK em outro runtime (`ork phase run <thread> CHECK --runtime <outro>`), ou tire a exigencia de validacao cruzada da thread se ela nao se justifica',
36
+ },
37
+ 'runtime.profile-invalid': {
38
+ porque: 'o perfil foi pedido pelo dono (--perfil) e nao existe no store ou e de outro runtime: repetir o pedido daria a mesma recusa, e trocar de perfil sozinho desobedeceria o pedido',
39
+ correcao: 'ork accounts list mostra os perfis de cada runtime; repita o despacho com um perfil do runtime certo ou sem --perfil',
40
+ },
41
+ 'cost.violation': {
42
+ porque: 'violacao de CUSTO nunca recebe retry automatico: cada reexecucao gastaria de novo pelo provider pago (subscription-only e regra de codigo, nao lembrete)',
43
+ correcao: 'tire do ambiente a variavel que redireciona o despacho e rode a fase de novo a mao, com o gasto sob os olhos de um humano',
44
+ },
45
+ 'verify.regression': {
46
+ porque: 'o comando passava na baseline e falha agora: o defeito e desta thread e tem alvo conhecido, entao ele vira spec de GO-FIX tipo B',
47
+ correcao: 'ork fix open <thread> (a reexecucao seguinte e completa)',
48
+ },
49
+ 'verify.failed': {
50
+ porque: 'o comando falha sem baseline para separar regressao de divida: a correcao dirigida conserta ou grava a baseline, mas nao chuta de quem e a culpa',
51
+ correcao: 'ork fix open <thread>, ou ork verify <thread> --baseline antes do proximo GO',
52
+ },
53
+ 'verify.timeout': {
54
+ porque: 'o prazo estourou antes de o comando terminar: a prova nao chegou ao fim, e carga de maquina nao e defeito. A reexecucao e completa, e o limite de escalacao do manifesto impede repetir para sempre',
55
+ correcao: 'ork verify <thread> de novo; se estourar sempre, suba verify.timeout_ms no manifesto ou divida o comando',
56
+ },
57
+ 'verify.sem-veredito': {
58
+ porque: 'um comando nao chegou a rodar ou o produto mudou no meio da rodada: nao ha veredito sobre ele, e a prova certa e rodar de novo, inteira',
59
+ correcao: 'ork verify <thread> de novo, sem editar a worktree durante a rodada',
60
+ },
61
+ 'ci.failed': {
62
+ porque: 'o recibo pertence ao provedor e ao SHA candidato: repetir uma fase não cria nem altera legitimamente esse resultado',
63
+ correcao: 'publique a candidata, aguarde o check obrigatório e repita o SHIP; se reprovou, corrija a causa registrada no runner',
64
+ },
65
+ 'runtime.unavailable': {
66
+ porque: 'falha de infraestrutura no despacho nao e falha de conteudo: o MESMO prompt, com o mesmo sha256, e redespachado sem alterar uma virgula',
67
+ correcao: 'ork retry run <thread> redespacha o prompt ja gravado em disco',
68
+ },
69
+ 'runtime.silencio': {
70
+ porque: 'fase sem heartbeat: retomar o despacho original com hash conferido e limite de tentativas',
71
+ correcao: 'ork retry run <thread> --motivo runtime.silencio',
72
+ },
73
+ 'runtime.rate-limited': {
74
+ porque: 'o limite de uso tem HORA de volta: a fase entra na fila duravel e e retomada na janela seguinte, sem humano no meio e sem gastar por fora da assinatura',
75
+ correcao: 'ork retry list mostra a fila; ork retry resume retoma o que ja liberou',
76
+ },
77
+ 'runtime.quota-exhausted': {
78
+ porque: 'a cota ou os creditos da CONTA acabaram, nao a infraestrutura: o perfil sai do rodizio ate o prazo e o MESMO prompt, com o mesmo sha256, segue no proximo perfil, no runtime de fallback ou na fila ate o menor prazo',
79
+ correcao: 'ork accounts list mostra o perfil esgotado; ork retry run <thread> rotaciona o prompt ja gravado',
80
+ },
81
+ 'runtime.auth-missing': {
82
+ porque: 'a conta do runtime perdeu a autenticacao: o perfil nunca mais recebe despacho ate o login ser refeito pelo proprio CLI, e o MESMO prompt segue no proximo perfil ou no runtime de fallback',
83
+ correcao: 'ork accounts check confere o login de cada perfil; ork retry run <thread> rotaciona o prompt ja gravado',
84
+ },
85
+ 'runtime.model-unavailable': {
86
+ porque: 'o modelo pedido nao existe ou a conta nao tem acesso a ele: o MESMO prompt, com o mesmo sha256, segue no proximo perfil do mesmo runtime com o mesmo modelo e depois no fallback do bloco, nunca de novo no par que ja recusou',
87
+ correcao: 'ork retry run <thread> troca o destino; sem destino, ork setup <modo> --bloco N --model <modelo acessivel> ou --fallback runtime:modelo',
88
+ },
89
+ 'runtime.workspace-untrusted': {
90
+ porque: 'o runtime recusou o diretorio da worktree antes de rodar qualquer coisa: depois que o dono aceita a confianca no terminal, o MESMO prompt, com o mesmo sha256, volta a mesma fase; enquanto a confianca nao aparece no .claude.json da conta, nada e despachado',
91
+ correcao: 'o dono roda o comando da pausa (cd <worktree> && claude, aceita a confianca); ork retry run <thread> re-despacha o prompt ja gravado',
92
+ },
93
+ 'runtime.consent-pending': {
94
+ porque: 'o runtime espera o dono aceitar termos novos antes de rodar qualquer coisa: depois do aceite, o MESMO prompt, com o mesmo sha256, volta a mesma fase; se o runtime recusar de novo, a mesma pausa do dono volta',
95
+ correcao: 'o dono abre o CLI do runtime e aceita os termos; ork retry run <thread> re-despacha o prompt ja gravado',
96
+ },
97
+ 'tree.blocked': {
98
+ porque: 'a arvore de destino andou por baixo da thread: rebasar a worktree contra a base e o passo que desbloqueia, e reexecutar antes disso so repete o conflito',
99
+ correcao: 'ork worktree sync <thread> e so entao repetir o passo',
100
+ },
101
+ 'lease.resume-unavailable': {
102
+ porque: 'sem inode seguro, a remocao forcada exige avaliar a posse antes de retomar',
103
+ correcao: 'ork lease release <nome> --forcar; depois repita a aquisicao',
104
+ },
105
+ 'lease.busy': {
106
+ porque: 'o lease e de outra thread e vai ser liberado: a fila ja serializa, entao a acao e tentar de novo quando chegar a vez, nunca furar a fila',
107
+ correcao: 'ork lease list mostra a fila; a vez chega sem ninguem forcar',
108
+ },
109
+ 'conducao.em-andamento': {
110
+ porque: 'outra conducao executa na mesma worktree agora: a vez chega quando ela terminar, e furar a fila e o incidente de 19/09/2026',
111
+ correcao: 'ork conducao status <thread> mostra quem conduz; repita o pedido com --esperar <min> para seguir sozinho quando liberar',
112
+ },
113
+ 'hitl.formato': {
114
+ porque: 'o pedido HITL saiu fora do formato obrigatorio: quem errou foi o emissor, e a correcao e reemitir com alternativas rotuladas, consequencia por alternativa e exatamente uma recomendada com o porque',
115
+ correcao: 'ork fix open <thread> abre a rodada com a spec exata do formato',
116
+ },
117
+ 'human.pending': {
118
+ porque: 'nao e reprovacao de verdade, e espera de autorizacao: automatizar a espera seria a maquina se autorizando',
119
+ correcao: 'ork gate request <thread>',
120
+ },
121
+ },
122
+ usoPlanRun: (sub) => `uso: ork retry ${sub} <thread-id> [--motivo M] [--fase F]`,
123
+ // textoDoPlano
124
+ titulo: (thread) => `Plano de retry da thread ${thread}`,
125
+ modo: (modo) => ` modo ${modo}`,
126
+ fase: (fase) => ` fase ${fase ?? '(nenhuma)'}`,
127
+ motivo: (motivo) => ` motivo tipado ${motivo ?? '(nenhuma reprovacao pendente)'}`,
128
+ detalhe: (detalhe) => ` detalhe ${detalhe}`,
129
+ acao: (acao) => ` acao ${acao}`,
130
+ tentativas: (feitas, limite) => ` tentativas ${feitas} de ${limite} antes da escalacao`,
131
+ esforco: (effort, anterior) => ` esforco ${effort}${anterior !== null ? ` (escalado de ${anterior})` : ''}`,
132
+ automatica: (sim) => ` automatica ${sim ? 'sim' : 'nao'}`,
133
+ bloqueio: (bloqueio) => ` bloqueio ${bloqueio}`,
134
+ razao: (razao) => ` razao ${razao}`,
135
+ correcao: (correcao) => ` correcao ${correcao}`,
136
+ // textoDoRetry
137
+ execucao: (executada) => `Execucao: ${executada ? 'acao executada' : 'nada executado'}`,
138
+ linhaDoDetalhe: (detalhe) => ` ${detalhe}`,
139
+ rodada: (rodada, correcoes) => `GO-FIX rodada ${rodada}: ${correcoes}`,
140
+ correcaoDaRodada: (id, tipo, origem) => `${id} (tipo ${tipo}, ${origem})`,
141
+ reverify: (veredito, cobertura) => `CHECK-REVERIFY: ${veredito} (cobertura ${cobertura})`,
142
+ /** O veredito e a cobertura do CHECK-REVERIFY sao dado (ledger, --json); o texto so os traduz na impressao. */
143
+ vereditos: { 'PASSOU': 'PASSOU', 'PRECISA DE MUDANCA': 'PRECISA DE MUDANCA', 'BLOQUEADO': 'BLOQUEADO' },
144
+ coberturas: { completa: 'completa', parcial: 'parcial' },
145
+ fila: 'Fila de rate limit desta thread:',
146
+ pedidoNaFila: (id, fase, quando, estimada) => ` ${id} ${fase} libera em ${quando}${estimada ? ' (janela estimada)' : ''}`,
147
+ // planejarRetry: a razao do plano (vai ao ledger)
148
+ semReprovacao: 'nenhum gate reprovado no ledger desta thread',
149
+ nadaARepetir: 'nao ha o que repetir: o ledger da thread nao tem reprovacao tipada pendente',
150
+ limiteDeEscalacao: (tentativas, motivo, fase, limite) => `${tentativas} tentativa(s) automatica(s) por ${motivo} em ${fase}, no limite de ${limite} ` +
151
+ 'do manifesto: escalacao tipada pausa qualquer modo, inclusive #Auto',
152
+ comDelegacao: (porque, razao, delegado, evidencia) => `${porque}; ${razao}; delegado ${delegado}; evidência ${evidencia}`,
153
+ blocoPausa: (fases, pausaSobre, acao) => `o bloco ${fases} pausa neste modo ` +
154
+ `(${pausaSobre}): a acao ${acao} espera autorizacao humana. O modo afrouxa a pausa, nunca a verificacao.`,
155
+ silencioSemProva: 'runtime.silencio exige prova terminal atual da mesma sessao; ausencia ou silencio nao provam morte',
156
+ // executarRetry: o detalhe da execucao (vai ao ledger)
157
+ conduzidaAgora: (linha) => `${linha}; nada foi redespachado, a vez chega quando essa conducao terminar`,
158
+ ninguemConduz: 'ninguem conduz a thread agora: o proximo pedido segue normalmente',
159
+ naFila: (n, quando) => `${n} pedido(s) na fila duravel; o proximo libera em ${quando}`,
160
+ filaVazia: 'nenhum pedido aguardando na fila para esta thread',
161
+ sincronizada: (passos) => `worktree sincronizada com a base (${passos})`,
162
+ sincronizacaoFalhou: (detalhe) => `sincronizacao nao concluiu: ${detalhe}`,
163
+ checkPassou: 'o CHECK passou no HEAD real: nao ha correcao a dirigir',
164
+ correcoesNaRodada: (n, rodada, veredito) => `${n} correcao(oes) na rodada ${rodada}` + (veredito !== null ? `; CHECK-REVERIFY: ${veredito}` : ''),
165
+ semDespachoFalho: (fase, thread) => `nao ha despacho falho registrado em ${fase} com prompt gravado: ` +
166
+ `rode a fase de novo com \`ork phase run ${thread} ${fase} --prompt "..."\``,
167
+ semConfianca: (motivo, cwd, thread) => `${motivo}: o runtime ainda nao confia em ${cwd}; nada foi despachado. ` +
168
+ `Rode \`cd ${cwd} && claude\`, aceite a confianca e repita \`ork retry run ${thread}\``,
169
+ /** RM-063 (F3): a sessao viva na thread; redespachar abriria a segunda na mesma worktree. */
170
+ sessaoAindaViva: (sessao, thread) => `a sessao ${sessao} ainda trabalha na thread no runtime; nada foi ` +
171
+ `redespachado (uma segunda sessao na mesma worktree). Espere ela terminar, ou pare-a com \`ork sessions stop ${sessao}\`, ` +
172
+ `e repita \`ork retry run ${thread}\``,
173
+ runtimeSemProva: (detalhe, thread) => `o runtime nao respondeu (${detalhe}): sem a prova de que nenhuma ` +
174
+ `sessao trabalha na thread, nada foi redespachado; repita \`ork retry run ${thread}\` quando ele responder`,
175
+ semDespachoComPrompt: (motivo, fase) => `nao ha despacho com prompt gravado para ${motivo} em ${fase}: rode a fase de novo com ork phase run`,
176
+ rotacaoRecusada: (erro) => `rotacao recusada: ${erro}`,
177
+ producaoParcialConta: (cota, evidencia) => `producao parcial sob ${cota ? 'cota esgotada' : 'auth ausente'}: ${evidencia}; ` +
178
+ 'a sessao nao e redespachada sobre a worktree alterada e a fase nao conclui sem o humano',
179
+ limiteDaRotacao: (tentativas, motivo, fase, limite) => `${tentativas} tentativa(s) de rotacao por ${motivo} em ${fase}, no limite de ${limite} do manifesto: escalacao tipada pausa qualquer modo`,
180
+ semLogin: 'nenhum perfil com login conferido em nenhum runtime da ordem de fallback: ' +
181
+ 'refaca o login com ork accounts add ou ork accounts check antes de retomar',
182
+ entrariaNaFila: (quando) => `ensaio: entraria na fila duravel ate ${quando}`,
183
+ pedidoAte: (id, quando) => `pedido ${id} na fila ate ${quando}`,
184
+ trocaRecusada: (erro) => `troca de destino recusada: ${erro}`,
185
+ producaoParcialModelo: (rotulo, evidencia) => `producao parcial com o modelo ${rotulo} inacessivel: ${evidencia}; ` +
186
+ 'a sessao nao e redespachada sobre a worktree alterada e a fase nao conclui sem o humano',
187
+ padraoDoRuntime: '(padrao do runtime)',
188
+ ensaioDoModelo: (runtime, perfil, modelo, detalhe) => `ensaio: o mesmo prompt iria a ${runtime}` +
189
+ `${perfil ? ` (perfil ${perfil})` : ''} com o modelo ${modelo}; ${detalhe}`,
190
+ limiteDaTroca: (tentativas, motivo, fase, limite) => `${tentativas} tentativa(s) de troca por ${motivo} em ${fase}, no limite de ${limite} do manifesto: escalacao tipada pausa qualquer modo`,
191
+ modeloSemDestino: (rotulo, tentados, correcao) => `o modelo ${rotulo} nao esta acessivel em ${tentados} e o bloco nao tem outro destino: ${correcao}`,
192
+ correcaoDoModelo: (modo, bloco) => `ork setup ${modo} --bloco ${bloco} --model <modelo acessivel>, ou declare no mesmo bloco --fallback runtime:modelo`,
193
+ // redespachar: o detalhe do redespacho (vai ao ledger)
194
+ promptSumiu: (caminho) => `o prompt gravado sumiu do disco: ${caminho}`,
195
+ promptMudou: (caminho, atual, original) => `o prompt em ${caminho} mudou desde o despacho original ` +
196
+ `(sha256 ${atual} != ${original}): retomada e redespachar o MESMO texto`,
197
+ jaConduz: (sessao, fase) => `a sessao ${sessao} ja conduz a fase ${fase} com este prompt: nada foi redespachado`,
198
+ baselinePendente: (runtime) => `baseline.pendente: o bloco com GO no ${runtime} precisa da baseline antes da retomada`,
199
+ runtimeIndisponivel: (erro) => `runtime.unavailable: ${erro}`,
200
+ ensaioDoRedespacho: 'ensaio (--dry-run): comando montado, nada despachado',
201
+ semSessionId: 'sem sessionId na saida do runtime',
202
+ redespachada: (sessao, sha, perfil, runtime) => `sessao ${sessao} despachada com o mesmo prompt sha256 ${sha}` + (perfil ? ` no perfil ${perfil} (${runtime})` : ''),
203
+ };
204
+ exports.RETRY_EN = {
205
+ politica: {
206
+ 'artifact.missing': {
207
+ porque: 'the artifact the phase requires does not exist: the phase needs a directed spec of what to write, not a blind repeat of the same prompt',
208
+ correcao: '`ork fix open <thread>` opens the round with the exact spec',
209
+ },
210
+ 'claims.failed': {
211
+ porque: 'the claim failed when rerun on the real HEAD: running the phase again the same way reproduces the same lie; what fixes it is a GO-FIX with the exact claim and command',
212
+ correcao: '`ork fix open <thread>` and then `ork fix reverify <thread>`',
213
+ },
214
+ 'claims.unverifiable': {
215
+ porque: 'a claim without a verification command becomes a type A fix: attaching the command (or withdrawing the claim with a reason) is one line, not a whole GO',
216
+ correcao: 'ork claims verificar <thread> <claim> --comando "<command>"',
217
+ },
218
+ 'policy.violation': {
219
+ porque: 'a policy with block severity fails in any mode: rerunning on its own would be the machine revoking the manifest policy',
220
+ correcao: 'fix the violation in the request or the manifest; a block policy is not solved by repetition',
221
+ },
222
+ 'runtime.autoconferencia': {
223
+ porque: 'repeating the dispatch on the SAME runtime would give the same result: what is missing is not another attempt but a validator other than the one that executed. Picking the other runtime is a conduction decision, not a retry',
224
+ correcao: 'dispatch CHECK on another runtime (`ork phase run <thread> CHECK --runtime <other>`), or drop the cross-validation requirement from the thread if it is not justified',
225
+ },
226
+ 'runtime.profile-invalid': {
227
+ porque: 'the owner asked for the profile (`--perfil`) and it does not exist in the store or belongs to another runtime: repeating the request would get the same refusal, and switching profiles on its own would disobey the request',
228
+ correcao: '`ork accounts list` shows the profiles of each runtime; repeat the dispatch with a profile of the right runtime or without `--perfil`',
229
+ },
230
+ 'cost.violation': {
231
+ porque: 'a COST violation never gets an automatic retry: each rerun would spend again through the paid provider (subscription-only is a code rule, not a reminder)',
232
+ correcao: 'remove from the environment the variable that redirects the dispatch and run the phase again by hand, with a human watching the spend',
233
+ },
234
+ 'verify.regression': {
235
+ porque: 'the command passed in the baseline and fails now: the defect belongs to this thread and has a known target, so it becomes a type B GO-FIX spec',
236
+ correcao: '`ork fix open <thread>` (the next rerun is complete)',
237
+ },
238
+ 'verify.failed': {
239
+ porque: 'the command fails with no baseline to tell a regression from debt: the directed fix repairs it or records the baseline, but does not guess who is to blame',
240
+ correcao: '`ork fix open <thread>`, or `ork verify <thread> --baseline` before the next GO',
241
+ },
242
+ 'verify.timeout': {
243
+ porque: 'the deadline ran out before the command finished: the proof did not reach the end, and machine load is not a defect. The rerun is complete, and the manifest escalation limit keeps it from repeating forever',
244
+ correcao: '`ork verify <thread>` again; if it always times out, raise `verify.timeout_ms` in the manifest or split the command',
245
+ },
246
+ 'verify.sem-veredito': {
247
+ porque: 'a command never ran or the product changed during the run: there is no verdict on it, and the right proof is to run again, in full',
248
+ correcao: '`ork verify <thread>` again, without editing the worktree during the run',
249
+ },
250
+ 'ci.failed': {
251
+ porque: 'the receipt belongs to the provider and to the candidate SHA: repeating a phase neither creates nor legitimately changes that result',
252
+ correcao: 'publish the candidate, wait for the required check and run SHIP again; if it failed, fix the cause recorded on the runner',
253
+ },
254
+ 'runtime.unavailable': {
255
+ porque: 'an infrastructure failure in the dispatch is not a content failure: the SAME prompt, with the same sha256, is dispatched again without changing a comma',
256
+ correcao: '`ork retry run <thread>` re-dispatches the prompt already on disk',
257
+ },
258
+ 'runtime.silencio': {
259
+ porque: 'phase with no heartbeat: resume the original dispatch with the hash checked and an attempt limit',
260
+ correcao: 'ork retry run <thread> --motivo runtime.silencio',
261
+ },
262
+ 'runtime.rate-limited': {
263
+ porque: 'the usage limit has a TIME to come back: the phase enters the durable queue and resumes in the next window, with no human in the middle and no spending outside the subscription',
264
+ correcao: '`ork retry list` shows the queue; `ork retry resume` resumes what is already released',
265
+ },
266
+ 'runtime.quota-exhausted': {
267
+ porque: 'the ACCOUNT quota or credits ran out, not the infrastructure: the profile leaves the rotation until the deadline and the SAME prompt, with the same sha256, goes on to the next profile, the fallback runtime or the queue until the earliest deadline',
268
+ correcao: '`ork accounts list` shows the exhausted profile; `ork retry run <thread>` rotates the prompt already written',
269
+ },
270
+ 'runtime.auth-missing': {
271
+ porque: 'the runtime account lost its authentication: the profile gets no dispatch until the login is redone through the CLI itself, and the SAME prompt goes on to the next profile or the fallback runtime',
272
+ correcao: '`ork accounts check` checks the login of each profile; `ork retry run <thread>` rotates the prompt already written',
273
+ },
274
+ 'runtime.model-unavailable': {
275
+ porque: 'the requested model does not exist or the account has no access to it: the SAME prompt, with the same sha256, goes on to the next profile of the same runtime with the same model and then to the block fallback, never again to the pair that already refused',
276
+ correcao: '`ork retry run <thread>` switches the target; with no target, `ork setup <mode> --bloco N --model <available model>` or `--fallback runtime:model`',
277
+ },
278
+ 'runtime.workspace-untrusted': {
279
+ porque: 'the runtime refused the worktree directory before running anything: once the owner accepts trust in the terminal, the SAME prompt, with the same sha256, goes back to the same phase; while the trust is not in the account .claude.json, nothing is dispatched',
280
+ correcao: 'the owner runs the pause command (`cd <worktree> && claude`, accepting the trust); `ork retry run <thread>` re-dispatches the prompt already on disk',
281
+ },
282
+ 'runtime.consent-pending': {
283
+ porque: 'the runtime waits for the owner to accept new terms before running anything: after the acceptance, the SAME prompt, with the same sha256, goes back to the same phase; if the runtime refuses again, the same owner pause comes back',
284
+ correcao: 'the owner opens the runtime CLI and accepts the terms; `ork retry run <thread>` re-dispatches the prompt already on disk',
285
+ },
286
+ 'tree.blocked': {
287
+ porque: 'the target tree moved under the thread: rebasing the worktree onto the base is the step that unblocks it, and rerunning before that only repeats the conflict',
288
+ correcao: '`ork worktree sync <thread>`, and only then repeat the step',
289
+ },
290
+ 'lease.resume-unavailable': {
291
+ porque: 'without a safe inode, the forced removal requires checking ownership before resuming',
292
+ correcao: '`ork lease release <name> --forcar`; then repeat the acquisition',
293
+ },
294
+ 'lease.busy': {
295
+ porque: 'the lease belongs to another thread and will be released: the queue already serializes, so the action is to try again when the turn comes, never to jump the queue',
296
+ correcao: '`ork lease list` shows the queue; the turn comes with nobody forcing it',
297
+ },
298
+ 'conducao.em-andamento': {
299
+ porque: 'another conduction runs on the same worktree now: the turn comes when it finishes, and jumping the queue is the 2026-09-19 incident',
300
+ correcao: '`ork conducao status <thread>` shows who conducts; repeat the request with `--esperar <min>` to go on by itself when it frees up',
301
+ },
302
+ 'hitl.formato': {
303
+ porque: 'the HITL request came out of the required format: the issuer made the mistake, and the fix is to issue it again with labeled alternatives, a consequence per alternative and exactly one recommended, with the reason',
304
+ correcao: '`ork fix open <thread>` opens the round with the exact format spec',
305
+ },
306
+ 'human.pending': {
307
+ porque: 'this is not a real failure but a wait for authorization: automating the wait would be the machine authorizing itself',
308
+ correcao: 'ork gate request <thread>',
309
+ },
310
+ },
311
+ usoPlanRun: (sub) => `usage: ork retry ${sub} <thread-id> [--motivo M] [--fase F]`,
312
+ titulo: (thread) => `Retry plan for thread ${thread}`,
313
+ modo: (modo) => ` mode ${modo}`,
314
+ fase: (fase) => ` phase ${fase ?? '(none)'}`,
315
+ motivo: (motivo) => ` typed reason ${motivo ?? '(no pending failure)'}`,
316
+ detalhe: (detalhe) => ` detail ${detalhe}`,
317
+ acao: (acao) => ` action ${acao}`,
318
+ tentativas: (feitas, limite) => ` attempts ${feitas} of ${limite} before escalation`,
319
+ esforco: (effort, anterior) => ` effort ${effort}${anterior !== null ? ` (escalated from ${anterior})` : ''}`,
320
+ automatica: (sim) => ` automatic ${sim ? 'yes' : 'no'}`,
321
+ bloqueio: (bloqueio) => ` blocked by ${bloqueio}`,
322
+ razao: (razao) => ` reason ${razao}`,
323
+ correcao: (correcao) => ` fix ${correcao}`,
324
+ execucao: (executada) => `Run: ${executada ? 'action taken' : 'nothing run'}`,
325
+ linhaDoDetalhe: (detalhe) => ` ${detalhe}`,
326
+ rodada: (rodada, correcoes) => `GO-FIX round ${rodada}: ${correcoes}`,
327
+ correcaoDaRodada: (id, tipo, origem) => `${id} (type ${tipo}, ${origem})`,
328
+ reverify: (veredito, cobertura) => `CHECK-REVERIFY: ${veredito} (coverage ${cobertura})`,
329
+ vereditos: { 'PASSOU': 'PASSED', 'PRECISA DE MUDANCA': 'NEEDS CHANGES', 'BLOQUEADO': 'BLOCKED' },
330
+ coberturas: { completa: 'full', parcial: 'partial' },
331
+ fila: 'Rate limit queue for this thread:',
332
+ pedidoNaFila: (id, fase, quando, estimada) => ` ${id} ${fase} released at ${quando}${estimada ? ' (estimated window)' : ''}`,
333
+ semReprovacao: 'no failed gate in the ledger of this thread',
334
+ nadaARepetir: 'nothing to repeat: the thread ledger has no pending typed failure',
335
+ limiteDeEscalacao: (tentativas, motivo, fase, limite) => `${tentativas} automatic attempt(s) for ${motivo} in ${fase}, at the manifest limit of ${limite}: ` +
336
+ 'a typed escalation pauses any mode, including #Auto',
337
+ comDelegacao: (porque, razao, delegado, evidencia) => `${porque}; ${razao}; delegate ${delegado}; evidence ${evidencia}`,
338
+ blocoPausa: (fases, pausaSobre, acao) => `the ${fases} block pauses in this mode ` +
339
+ `(${pausaSobre}): action ${acao} waits for human authorization. The mode loosens the pause, never the verification.`,
340
+ silencioSemProva: 'runtime.silencio needs current terminal proof from the same session; absence or silence does not prove death',
341
+ conduzidaAgora: (linha) => `${linha}; nothing was dispatched again, the turn comes when that conduction ends`,
342
+ ninguemConduz: 'nobody conducts the thread now: the next request goes on normally',
343
+ naFila: (n, quando) => `${n} request(s) in the durable queue; the next one is released at ${quando}`,
344
+ filaVazia: 'no request waiting in the queue for this thread',
345
+ sincronizada: (passos) => `worktree synced with the base (${passos})`,
346
+ sincronizacaoFalhou: (detalhe) => `sync did not finish: ${detalhe}`,
347
+ checkPassou: 'CHECK passed on the real HEAD: there is no fix to direct',
348
+ correcoesNaRodada: (n, rodada, veredito) => `${n} fix(es) in round ${rodada}` + (veredito !== null ? `; CHECK-REVERIFY: ${veredito}` : ''),
349
+ semDespachoFalho: (fase, thread) => `no failed dispatch with a written prompt is recorded in ${fase}: ` +
350
+ `run the phase again with \`ork phase run ${thread} ${fase} --prompt "..."\``,
351
+ semConfianca: (motivo, cwd, thread) => `${motivo}: the runtime does not trust ${cwd} yet; nothing was dispatched. ` +
352
+ `Run \`cd ${cwd} && claude\`, accept the trust and repeat \`ork retry run ${thread}\``,
353
+ sessaoAindaViva: (sessao, thread) => `session ${sessao} is still working on the thread in the runtime; nothing was ` +
354
+ `redispatched (a second session on the same worktree). Wait for it to end, or stop it with \`ork sessions stop ${sessao}\`, ` +
355
+ `and repeat \`ork retry run ${thread}\``,
356
+ runtimeSemProva: (detalhe, thread) => `the runtime did not respond (${detalhe}): with no proof that no session works on the ` +
357
+ `thread, nothing was redispatched; repeat \`ork retry run ${thread}\` when it responds`,
358
+ semDespachoComPrompt: (motivo, fase) => `no dispatch with a written prompt for ${motivo} in ${fase}: run the phase again with \`ork phase run\``,
359
+ rotacaoRecusada: (erro) => `rotation refused: ${erro}`,
360
+ producaoParcialConta: (cota, evidencia) => `partial production under ${cota ? 'an exhausted quota' : 'missing auth'}: ${evidencia}; ` +
361
+ 'the session is not dispatched again over the changed worktree, and the phase does not finish without the human',
362
+ limiteDaRotacao: (tentativas, motivo, fase, limite) => `${tentativas} rotation attempt(s) for ${motivo} in ${fase}, at the manifest limit of ${limite}: a typed escalation pauses any mode`,
363
+ semLogin: 'no profile with a checked login in any runtime of the fallback order: ' +
364
+ 'redo the login with `ork accounts add` or `ork accounts check` before resuming',
365
+ entrariaNaFila: (quando) => `dry run: would enter the durable queue until ${quando}`,
366
+ pedidoAte: (id, quando) => `request ${id} in the queue until ${quando}`,
367
+ trocaRecusada: (erro) => `target switch refused: ${erro}`,
368
+ producaoParcialModelo: (rotulo, evidencia) => `partial production with model ${rotulo} unavailable: ${evidencia}; ` +
369
+ 'the session is not dispatched again over the changed worktree, and the phase does not finish without the human',
370
+ padraoDoRuntime: '(runtime default)',
371
+ ensaioDoModelo: (runtime, perfil, modelo, detalhe) => `dry run: the same prompt would go to ${runtime}` +
372
+ `${perfil ? ` (profile ${perfil})` : ''} with model ${modelo}; ${detalhe}`,
373
+ limiteDaTroca: (tentativas, motivo, fase, limite) => `${tentativas} switch attempt(s) for ${motivo} in ${fase}, at the manifest limit of ${limite}: a typed escalation pauses any mode`,
374
+ modeloSemDestino: (rotulo, tentados, correcao) => `model ${rotulo} is not available on ${tentados} and the block has no other target: ${correcao}`,
375
+ correcaoDoModelo: (modo, bloco) => `\`ork setup ${modo} --bloco ${bloco} --model <available model>\`, or declare \`--fallback runtime:model\` in the same block`,
376
+ promptSumiu: (caminho) => `the written prompt is gone from disk: ${caminho}`,
377
+ promptMudou: (caminho, atual, original) => `the prompt at ${caminho} changed since the original dispatch ` +
378
+ `(sha256 ${atual} != ${original}): resuming means dispatching the SAME text again`,
379
+ jaConduz: (sessao, fase) => `session ${sessao} already conducts phase ${fase} with this prompt: nothing was dispatched again`,
380
+ baselinePendente: (runtime) => `baseline.pendente: the block with GO on ${runtime} needs the baseline before resuming`,
381
+ runtimeIndisponivel: (erro) => `runtime.unavailable: ${erro}`,
382
+ ensaioDoRedespacho: 'dry run (--dry-run): command built, nothing dispatched',
383
+ semSessionId: 'no sessionId in the runtime output',
384
+ redespachada: (sessao, sha, perfil, runtime) => `session ${sessao} dispatched with the same prompt sha256 ${sha}` + (perfil ? ` on profile ${perfil} (${runtime})` : ''),
385
+ };