@orkastery/cli 0.5.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +37 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +118 -4
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/atualizar-branch.js +245 -0
  105. package/dist/auditoria.js +13 -11
  106. package/dist/auditrun.js +51 -46
  107. package/dist/autorizacao-duravel.js +327 -0
  108. package/dist/board.js +94 -40
  109. package/dist/branch-de-estado.js +16 -8
  110. package/dist/busca-semantica.js +7 -5
  111. package/dist/catalogo.js +2 -1
  112. package/dist/changelog-reconciliacao.js +290 -0
  113. package/dist/check-agil.js +500 -0
  114. package/dist/check-modo.js +41 -0
  115. package/dist/check-paralelo.js +183 -0
  116. package/dist/ci.js +248 -45
  117. package/dist/ciclos.js +8 -6
  118. package/dist/claim-lint.js +12 -8
  119. package/dist/claims-conferir.js +47 -39
  120. package/dist/claims.js +10 -9
  121. package/dist/company-brain-client.js +10 -3
  122. package/dist/company-brain-migration.js +11 -5
  123. package/dist/conducao-batida.js +759 -0
  124. package/dist/conducao-sentinela.js +25 -8
  125. package/dist/conducao.js +84 -29
  126. package/dist/conhecimento-consulta.js +270 -0
  127. package/dist/conhecimento.js +111 -87
  128. package/dist/conta-esgotada.js +127 -0
  129. package/dist/dado-privado.js +816 -0
  130. package/dist/decisao-autonoma.js +5 -4
  131. package/dist/demo.js +14 -12
  132. package/dist/dependencias-da-worktree.js +25 -0
  133. package/dist/divida.js +38 -36
  134. package/dist/docs.js +81 -74
  135. package/dist/doctor-forja.js +345 -0
  136. package/dist/doctor-pulse-cron.js +113 -1
  137. package/dist/doctor.js +164 -6
  138. package/dist/dsn-da-memoria.js +417 -0
  139. package/dist/entrega-por-mod.js +503 -0
  140. package/dist/entrega-pr.js +143 -43
  141. package/dist/esgotamentos.js +13 -11
  142. package/dist/estado-thread.js +21 -18
  143. package/dist/evalrunner.js +35 -32
  144. package/dist/fabrica-batida.js +34 -21
  145. package/dist/fabrica-estado.js +13 -10
  146. package/dist/fix.js +21 -19
  147. package/dist/forja/adaptador.js +6 -0
  148. package/dist/forja/ambiente-de-ci.js +27 -0
  149. package/dist/forja/api.js +256 -0
  150. package/dist/forja/cache.js +89 -0
  151. package/dist/forja/cli.js +60 -0
  152. package/dist/forja/contrato.js +9 -0
  153. package/dist/forja/endereco.js +43 -0
  154. package/dist/forja/estado.js +22 -0
  155. package/dist/forja/executor.js +73 -0
  156. package/dist/forja/github/ci.js +95 -0
  157. package/dist/forja/github/dono-da-rede.js +18 -0
  158. package/dist/forja/github/metadados.js +15 -0
  159. package/dist/forja/github/pedidos.js +200 -0
  160. package/dist/forja/gitlab/ci.js +141 -0
  161. package/dist/forja/gitlab/consultas.js +59 -0
  162. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  163. package/dist/forja/gitlab/metadados.js +15 -0
  164. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  165. package/dist/forja/gitlab/pedidos.js +141 -0
  166. package/dist/forja/produtor.js +32 -0
  167. package/dist/forja/registro.js +31 -0
  168. package/dist/forja/resolver.js +121 -0
  169. package/dist/forja/texto.js +13 -0
  170. package/dist/forja/versao.js +71 -0
  171. package/dist/forja.js +123 -80
  172. package/dist/handoff.js +23 -13
  173. package/dist/hitl-contract.js +46 -43
  174. package/dist/hitl-curto.js +37 -25
  175. package/dist/hitl-gates.js +13 -11
  176. package/dist/hitl-local-receipt.js +51 -0
  177. package/dist/hitl-local.js +11 -2
  178. package/dist/hitl-lock.js +5 -11
  179. package/dist/hitl-public-receipt.js +11 -0
  180. package/dist/hitl-resumo.js +44 -1
  181. package/dist/hitl-sessions.js +62 -9
  182. package/dist/hitl-texto-livre.js +7 -4
  183. package/dist/hitl.js +34 -31
  184. package/dist/horario.js +16 -0
  185. package/dist/hosts.js +104 -134
  186. package/dist/index.js +848 -548
  187. package/dist/indice-vetorial.js +14 -12
  188. package/dist/init.js +11 -2
  189. package/dist/integracoes-locais.js +2 -0
  190. package/dist/intelligence-graph-cli.js +123 -69
  191. package/dist/intelligence-graph-query.js +37 -22
  192. package/dist/leases.js +19 -18
  193. package/dist/ledger-stats.js +17 -16
  194. package/dist/ledger.js +31 -1
  195. package/dist/licoes.js +12 -11
  196. package/dist/locale-accounts.js +220 -0
  197. package/dist/locale-adapter.js +291 -0
  198. package/dist/locale-ajuda.js +76 -4
  199. package/dist/locale-audit.js +199 -0
  200. package/dist/locale-claims.js +213 -0
  201. package/dist/locale-conducao.js +138 -0
  202. package/dist/locale-conhecimento.js +181 -0
  203. package/dist/locale-decisao.js +205 -0
  204. package/dist/locale-docs.js +230 -0
  205. package/dist/locale-estado.js +101 -0
  206. package/dist/locale-forja.js +290 -0
  207. package/dist/locale-gerados.js +5 -0
  208. package/dist/locale-grafo.js +129 -0
  209. package/dist/locale-master.js +83 -0
  210. package/dist/locale-network.js +524 -0
  211. package/dist/locale-operacao-restante.js +931 -0
  212. package/dist/locale-projetos.js +100 -0
  213. package/dist/locale-prompts.js +194 -0
  214. package/dist/locale-pulse.js +140 -2
  215. package/dist/locale-reservas.js +87 -0
  216. package/dist/locale-retry.js +145 -6
  217. package/dist/locale-security-scan.js +69 -0
  218. package/dist/locale-setup.js +192 -0
  219. package/dist/locale-ship.js +169 -66
  220. package/dist/locale-thread.js +149 -5
  221. package/dist/locale-verify.js +80 -4
  222. package/dist/locale-worktree.js +246 -0
  223. package/dist/locale.js +553 -9
  224. package/dist/maestro-runtime.js +22 -3
  225. package/dist/manifest.js +287 -11
  226. package/dist/maquina-ociosa.js +211 -0
  227. package/dist/maquina.js +10 -5
  228. package/dist/master-nota-local.js +200 -0
  229. package/dist/master-nota.js +10 -2
  230. package/dist/master.js +118 -41
  231. package/dist/mcp-conhecimento.js +52 -0
  232. package/dist/mcp-experiencia.js +26 -5
  233. package/dist/mcp-install.js +73 -8
  234. package/dist/mcp-noctum.js +101 -0
  235. package/dist/mcp-server.js +82 -14
  236. package/dist/mcp-ship-transporte.js +977 -0
  237. package/dist/mcp-ship.js +68 -24
  238. package/dist/mcp-transportes.js +17 -0
  239. package/dist/memoria.js +63 -58
  240. package/dist/modos-migracao.js +8 -6
  241. package/dist/modos.js +17 -18
  242. package/dist/network-roadmap.js +85 -49
  243. package/dist/noctum-aceite.js +789 -0
  244. package/dist/noctum-arco.js +540 -33
  245. package/dist/noctum-capacidade.js +3 -3
  246. package/dist/noctum-changelog.js +399 -0
  247. package/dist/noctum-cli.js +482 -0
  248. package/dist/noctum-coordenacao.js +1225 -0
  249. package/dist/noctum-entrega.js +1169 -0
  250. package/dist/noctum-envelope.js +252 -16
  251. package/dist/noctum-execucao.js +95 -23
  252. package/dist/noctum-fechamento.js +405 -0
  253. package/dist/noctum-fila.js +43 -9
  254. package/dist/noctum-guarda.js +256 -0
  255. package/dist/noctum-integracao.js +507 -0
  256. package/dist/noctum-maquinas.js +383 -0
  257. package/dist/noctum-medicao.js +450 -0
  258. package/dist/noctum-modo.js +362 -0
  259. package/dist/noctum-pergunta-canal.js +96 -0
  260. package/dist/noctum-pergunta.js +115 -0
  261. package/dist/noctum-provas.js +838 -0
  262. package/dist/noctum-reconciliacao.js +591 -0
  263. package/dist/noctum-registro.js +215 -0
  264. package/dist/noctum-relatorio.js +827 -0
  265. package/dist/noctum-resposta.js +207 -0
  266. package/dist/noctum-sessoes-em-voo.js +93 -0
  267. package/dist/noctum-supervisao.js +649 -0
  268. package/dist/noctum-terminal.js +459 -0
  269. package/dist/noctum-transporte.js +655 -0
  270. package/dist/noctum-vigia.js +639 -0
  271. package/dist/ocupacao.js +3 -1
  272. package/dist/onboarding.js +16 -5
  273. package/dist/orkmind.js +39 -23
  274. package/dist/orquestracao.js +31 -35
  275. package/dist/parado-no-condutor.js +146 -124
  276. package/dist/phase.js +53 -27
  277. package/dist/policies.js +33 -0
  278. package/dist/postura-local.js +4 -3
  279. package/dist/procedencia.js +9 -14
  280. package/dist/projeto-alvo.js +59 -20
  281. package/dist/prompts.js +136 -42
  282. package/dist/prova-minima.js +5 -6
  283. package/dist/pulse-cadencia.js +5 -4
  284. package/dist/pulse-consentimento.js +53 -1
  285. package/dist/pulse-delivery.js +143 -27
  286. package/dist/pulse-resposta.js +368 -4
  287. package/dist/pulse.js +136 -3
  288. package/dist/ratelimit.js +12 -4
  289. package/dist/recall.js +14 -13
  290. package/dist/rede-adesao.js +13 -8
  291. package/dist/rede-forja.js +108 -24
  292. package/dist/rede-status.js +63 -45
  293. package/dist/rede.js +86 -46
  294. package/dist/retomada-checkpoint.js +101 -0
  295. package/dist/retry.js +228 -73
  296. package/dist/roadmap-reservas.js +32 -32
  297. package/dist/runtime-ambiente.js +5 -0
  298. package/dist/runtime-context.js +117 -43
  299. package/dist/runtime-escada.js +423 -0
  300. package/dist/runtime-profiles.js +103 -46
  301. package/dist/saida-segura.js +3 -2
  302. package/dist/security-scan/agil.js +355 -0
  303. package/dist/security-scan/cli.js +76 -0
  304. package/dist/security-scan/compare.js +149 -0
  305. package/dist/security-scan/config.js +93 -0
  306. package/dist/security-scan/detect.js +97 -0
  307. package/dist/security-scan/executor.js +188 -0
  308. package/dist/security-scan/guard.js +180 -0
  309. package/dist/security-scan/imagem-de-lint.js +96 -0
  310. package/dist/security-scan/normalize/actionlint.js +12 -0
  311. package/dist/security-scan/normalize/eslint.js +12 -0
  312. package/dist/security-scan/normalize/gitleaks.js +13 -0
  313. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  314. package/dist/security-scan/normalize/govulncheck.js +36 -0
  315. package/dist/security-scan/normalize/index.js +25 -0
  316. package/dist/security-scan/normalize/npm-audit.js +30 -0
  317. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  318. package/dist/security-scan/normalize/oxlint.js +51 -0
  319. package/dist/security-scan/normalize/pip-audit.js +16 -0
  320. package/dist/security-scan/normalize/ruff.js +12 -0
  321. package/dist/security-scan/normalize/semgrep.js +20 -0
  322. package/dist/security-scan/normalize/trivy.js +33 -0
  323. package/dist/security-scan/normalize/util.js +204 -0
  324. package/dist/security-scan/normalize/zizmor.js +19 -0
  325. package/dist/security-scan/report.js +156 -0
  326. package/dist/security-scan/run.js +448 -0
  327. package/dist/security-scan/tools.js +62 -0
  328. package/dist/security-scan/trabalhador.js +74 -0
  329. package/dist/security-scan/types.js +15 -0
  330. package/dist/session-events.js +19 -2
  331. package/dist/session-watcher-claude.js +74 -19
  332. package/dist/session-watcher.js +156 -10
  333. package/dist/sessoes-contas.js +9 -0
  334. package/dist/sessoes-inventario.js +1 -1
  335. package/dist/sessoes.js +25 -23
  336. package/dist/setup.js +59 -58
  337. package/dist/ship-publicar.js +263 -92
  338. package/dist/ship.js +160 -17
  339. package/dist/superficie.js +14 -11
  340. package/dist/thread-close.js +9 -9
  341. package/dist/thread.js +121 -18
  342. package/dist/tokens.js +15 -11
  343. package/dist/trabalho-thread.js +297 -0
  344. package/dist/transporte-do-canal.js +189 -0
  345. package/dist/types.js +12 -1
  346. package/dist/util.js +5 -2
  347. package/dist/varredura-acoes.js +507 -0
  348. package/dist/verify.js +472 -29
  349. package/dist/worktree-local.js +12 -10
  350. package/dist/worktree.js +81 -85
  351. package/eval/casos/check-quality.json +77 -0
  352. package/eval/casos/security-auditor.json +148 -0
  353. package/eval/casos/security-remediation.json +161 -0
  354. package/eval/fixtures/security-scan/README.md +8 -0
  355. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  356. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  357. package/eval/fixtures/security-scan/go/README.md +4 -0
  358. package/eval/fixtures/security-scan/go/config.go +4 -0
  359. package/eval/fixtures/security-scan/go/go.mod +5 -0
  360. package/eval/fixtures/security-scan/go/go.sum +2 -0
  361. package/eval/fixtures/security-scan/go/main.go +31 -0
  362. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  363. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  364. package/eval/fixtures/security-scan/js/README.md +4 -0
  365. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  366. package/eval/fixtures/security-scan/js/package.json +10 -0
  367. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  368. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  369. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  370. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  371. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  372. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  373. package/eval/fixtures/security-scan/python/README.md +4 -0
  374. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  375. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  376. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  377. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  378. package/package.json +9 -4
  379. package/references/security-checklist.md +3 -3
  380. package/skills/README.md +1 -0
  381. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  382. package/skills/phases/check-quality/SKILL.md +16 -0
  383. package/skills/phases/go-implementation/SKILL.md +6 -0
  384. package/skills/phases/security-remediation/SKILL.md +70 -0
  385. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -0,0 +1,931 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, F3d: mensagens das familias operacionais que ainda estavam fora do catalogo.
4
+ *
5
+ * Os valores vindos do runtime, do ledger ou de outro processo continuam dados: este
6
+ * catalogo traduz somente a moldura que o CLI monta para uma pessoa.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OPERACAO_RESTANTE_EN = exports.OPERACAO_RESTANTE_PT_BR = void 0;
10
+ exports.OPERACAO_RESTANTE_PT_BR = {
11
+ sessions: {
12
+ atencao: (valor) => `--atencao espera minutos (inteiro >= 0), recebeu "${valor}"`,
13
+ usoWatch: 'uso: ork sessions watch --thread T [--sessao ID] [--once]',
14
+ sessaoDaThread: 'sessão não pertence à thread',
15
+ usoEvent: 'uso: ork sessions event --tipo <tipo> --sessao <id> < payload.json (máximo 16384 bytes)',
16
+ eventoRecusado: (detalhe) => `evento recusado: ${detalhe}`,
17
+ exigeProjeto: 'ork sessions limpar-fantasmas precisa de um projeto (orkastery.yaml)',
18
+ request: 'sessions request exige thread, UUID, --fase e --runtime; --pergunta só confere o conteúdo nativo',
19
+ answer: 'sessions answer exige thread, pedido e envelope autenticado em --stdin',
20
+ reconcile: 'sessions reconcile exige thread e pedido',
21
+ supersede: 'sessions supersede exige thread, UUID, --fase e --runtime',
22
+ usoSub: (sub) => `uso: ork sessions ${sub} <sessao>`,
23
+ desconhecido: (sub) => `subcomando desconhecido: sessions ${sub}`,
24
+ inventario: {
25
+ abertura: (global, usuario, historico) => `Inventário ${global ? 'global' : 'do projeto'} da conta ${usuario}; histórico: ${historico ? 'incluído' : 'omitido'}.`,
26
+ fontes: (valor) => `Fontes: ${valor}`,
27
+ fonteEstado: { ausente: 'ausente', ok: 'ok', falha: 'FALHA' },
28
+ resumo: (total, semThread, ambiguas, fantasmas, ok) => `Total: ${total}; sem thread: ${semThread}; ambíguas: ${ambiguas}; fantasmas: ${fantasmas}; consulta: ${ok ? 'válida' : 'INCOMPLETA'}.`,
29
+ colunas: ['ID', 'RUNTIME', 'PERFIL', 'ESTADO', 'THREAD/FASE'],
30
+ processo: 'processo', desconhecido: 'unknown', fantasma: 'fantasma', fora: '(fora do ork)',
31
+ explicacaoFantasma: 'Fantasma: registro sem processo vivo, não ocupa vaga; `ork sessions limpar-fantasmas` solta o vínculo do ork sem tocar no runtime.',
32
+ falha: (detalhe) => `Falha: ${detalhe}`,
33
+ ausente: (detalhe, correcao) => `Ausente: ${detalhe}${correcao ? `; correção: ${correcao}` : ''}`,
34
+ },
35
+ localizar: {
36
+ ambigua: (chave, contas) => `sessao "${chave}" encontrada em mais de uma conta: ${contas}; use o id completo`,
37
+ ausente: (chave, falhas) => `sessao "${chave}" nao encontrada no runtime${falhas ? `; contas sem resposta: ${falhas}` : ''}`,
38
+ parada: (id, perfil) => `sessao ${id} parada${perfil ? ` (perfil ${perfil})` : ''}`,
39
+ },
40
+ limpeza: {
41
+ nenhuma: (parcial) => `Nenhuma sessão fantasma${parcial ? ' nas contas que responderam' : ''}.`,
42
+ falha: (detalhe) => `Falha: ${detalhe}`,
43
+ acoes: {
44
+ soltaria: 'soltaria (sessao_morta no ledger)', solto: 'solto: sessao_morta no ledger',
45
+ jaSolto: 'já encerrada no ledger', semThread: 'fora do ork: nada a soltar',
46
+ outroProjeto: 'vínculo de outro projeto: rode lá',
47
+ },
48
+ abertura: (ensaio) => `Sessões fantasma (sem pid e sem processo)${ensaio ? ', ensaio: nada foi gravado' : ''}. O runtime não foi tocado.`,
49
+ colunas: ['ID', 'PERFIL', 'THREAD/FASE', 'AÇÃO'],
50
+ processo: 'processo',
51
+ },
52
+ radar: {
53
+ titulo: (total) => `Radar de sessoes do runtime (${total} sessao(oes) na maquina)`,
54
+ resumo: (humanas, hitl, abandonadas, falhas, desconhecidas, trabalhando, fora) => ` precisam de humano: ${humanas} (HITL vivo ${hitl}, abandonada ${abandonadas}, falha ${falhas}, ` +
55
+ `estado desconhecido ${desconhecidas}) | trabalhando: ${trabalhando} | fora do ork: ${fora}`,
56
+ limite: (minutos, acima) => ` limite de atencao: ${minutos} min (${acima} parada(s) acima, marcadas com !)`,
57
+ falha: (detalhe) => ` [fail] ${detalhe}: NAO da para saber quem esta parado`,
58
+ semLogs: ' [warn] --sem-logs: o radar diz QUEM esta parado, mas nao O QUE cada sessao pergunta',
59
+ nenhuma: ' Nenhuma sessao na varredura.',
60
+ colunas: ['ID', 'NOME', 'CLASSE', 'ESTADO', 'TIPO', 'DIRETORIO', 'THREAD', 'IDADE'],
61
+ vazio: '(vazio)', fora: 'fora do ork', nenhumaEsperando: ' Nenhuma sessao esperando o humano.',
62
+ vivas: 'Esperando o HUMANO agora, com o job VIVO (responder destrava na hora):',
63
+ mortas: 'MORRERAM esperando resposta (job ja saiu: nao adianta responder, o trabalho parou):',
64
+ onde: 'onde', porque: 'por que', pergunta: 'pergunta', log: 'log', opcao: 'opcao',
65
+ parada: 'parada ha', viva: 'viva ha', ver: 'ver', responder: 'responder', recomendo: 'recomendo',
66
+ thread: (id, fase) => `thread ${id}, fase ${fase}`,
67
+ sessaoFora: 'sessao fora do ork',
68
+ paradaDesconhecida: 'desconhecido; registre com --registrar',
69
+ desdeObservacao: 'desde a primeira observação', idade: 'idade da sessao', desdeInicio: 'desde que a sessao comecou',
70
+ },
71
+ },
72
+ gate: {
73
+ usoContext: 'uso: ork gate context <thread> <pedido> [--native-offer-stdin]',
74
+ requestThread: 'gate request exige thread',
75
+ formato: 'gate request: --formato telegram|terminal',
76
+ answer: 'gate answer exige thread, pedido e --resposta-stdin',
77
+ usoNext: 'uso: ork gate next <thread-id> [--proximo FASE] [--ocupacao 0..1]',
78
+ approveAposentado: 'gate approve aposentado: aprovação sem pedido é recusada. Use ork gate request <thread-id> e responda pelo ingresso humano autenticado.',
79
+ registrado: (thread) => `Autorizacao humana registrada no ledger da thread ${thread}.`,
80
+ sobre: (valor) => ` sobre ${valor}`,
81
+ autorizado: (valor) => ` autorizado por ${valor}`,
82
+ quando: (valor) => ` quando ${valor}`,
83
+ desconhecido: (sub) => `subcomando desconhecido: gate ${sub}`,
84
+ tokens: {
85
+ titulo: (thread) => `ork gate next: thread ${thread}`,
86
+ ocupacao: (valor) => ` ocupacao ${valor}`,
87
+ naoMedivel: 'nao medivel',
88
+ fonte: (valor) => ` fonte ${valor}`,
89
+ detalhe: (valor) => ` ${valor}`,
90
+ limiares: (rotate, force) => ` limiares rotate_above ${rotate} | force_rotate_above ${force}`,
91
+ proximo: (fase, peso) => ` proximo passo ${fase} (${peso})`,
92
+ pesado: 'pesado', leve: 'leve',
93
+ veredito: (valor, fonte) => `VEREDITO: ${valor} (decidido por ${fonte})`,
94
+ razao: (valor) => ` razao: ${valor}`,
95
+ slug: (valor) => ` slug da nova sessao: ${valor}`,
96
+ handoff: (thread, fase) => ` proximo passo: ork handoff export ${thread} --proxima-fase ${fase}`,
97
+ ledger: (thread) => `Registrado no ledger como token_gate: ork phase list ${thread}`,
98
+ localizarDetalhe: (_fonte, valor) => valor,
99
+ localizarRazao: (_ocupacao, _rotate, _force, _pesado, _refazer, _proximo, valor) => valor,
100
+ },
101
+ },
102
+ fix: {
103
+ usoOpen: 'uso: ork fix open <thread-id> [--so-claims] [--reverify]',
104
+ usoList: 'uso: ork fix list <thread-id> [--rodada N]',
105
+ semRodada: (thread) => `A thread ${thread} nao tem rodada de GO-FIX. Abra com: ork fix open ${thread}`,
106
+ lista: (rodada, thread) => `Correcoes da rodada ${rodada} da thread ${thread}`,
107
+ colunasLista: ['ID', 'TIPO', 'MOTIVO', 'ALVO', 'ESTADO', 'JULGADO POR'],
108
+ usoReverify: 'uso: ork fix reverify <thread-id> [--rodada N] [--parcial]',
109
+ desconhecido: (sub) => `subcomando desconhecido: fix ${sub}`,
110
+ semCorrecoes: (thread) => `Thread ${thread}: o CHECK PASSOU no HEAD real, nao ha correcao a abrir.\n` +
111
+ ' (nenhum motivo tipado bloqueante em `ork verify`)',
112
+ aberto: (thread, rodada) => `GO-FIX aberto na thread ${thread} (rodada ${rodada})`,
113
+ veredito: (valor) => ` veredito do CHECK ${valor}`,
114
+ motivos: (valor) => ` motivos tipados ${valor}`,
115
+ reexecucao: (tipoB) => ` reexecucao ${tipoB ? 'COMPLETA obrigatoria (ha correcao tipo B)' : 'parcial permitida (rodada so de tipo A)'}`,
116
+ colunas: ['ID', 'TIPO', 'MOTIVO', 'ALVO', 'JULGADO POR'],
117
+ verifyCompleto: '(verify completo)',
118
+ spec: 'Spec exata despachada ao GO-FIX:',
119
+ reverify: (thread, rodada) => `CHECK-REVERIFY da thread ${thread} (rodada ${rodada})`,
120
+ cobertura: (valor) => ` cobertura ${valor}`,
121
+ rodadas: (rodadas, limite) => ` rodadas ${rodadas} de ${limite} antes da escalacao`,
122
+ porCorrecao: 'Veredito por correcao:',
123
+ correcao: (id, tipo, aprovada, alvo) => ` ${id} tipo ${tipo} ${aprovada ? 'APROVADA' : 'REPROVADA'} ${alvo}`,
124
+ origem: (valor) => ` motivo de origem: ${valor}`,
125
+ execucao: (ok, comando) => ` ${ok ? 'ok ' : 'FALHOU'} ${comando}`,
126
+ verify: (commit, ok, motivos) => `Verify completo no HEAD ${commit}: ${ok ? 'verde' : `reprovado (${motivos})`}`,
127
+ final: (valor) => `Veredito final: ${valor}`,
128
+ escalado: ' ESCALADO PARA HUMANO: esta pausa vale em qualquer modo, inclusive #Auto.',
129
+ vereditos: { PASSOU: 'PASSOU', 'PRECISA DE MUDANCA': 'PRECISA DE MUDANCA', BLOQUEADO: 'BLOQUEADO' },
130
+ coberturas: { completa: 'completa', parcial: 'parcial' },
131
+ },
132
+ handoff: {
133
+ usoExport: 'uso: ork handoff export <thread-id> [--proxima-fase FASE]',
134
+ historico: (caminho) => `Historico: ${caminho}`,
135
+ usoRecall: 'uso: ork handoff recall <thread-id> <path#ancora>',
136
+ resolvido: (local) => `Ponteiro resolvido: ${local}`,
137
+ metodo: (valor) => ` metodo ${valor}`,
138
+ sha: (valor) => ` sha256 ${valor}`,
139
+ linhas: (valor) => ` linhas ${valor}`,
140
+ naoAplicavel: '(nao aplicavel)',
141
+ desconhecido: (sub) => `subcomando desconhecido: handoff ${sub}`,
142
+ exportado: (thread, memory) => `Handoff exportado da thread ${thread} (regime memory: ${memory})`,
143
+ de: (slug, fase) => ` de ${slug} (fase ${fase})`,
144
+ para: (slug, fase) => ` para ${slug} (fase ${fase})`,
145
+ arquivo: (caminho) => ` arquivo ${caminho}`,
146
+ critico: (total) => `CRITICO (${total} item(ns), vao inline no prompt da nova sessao):`,
147
+ proveniencia: (local, sha) => ` proveniencia: ${local} (sha256 ${sha})`,
148
+ importante: (total) => `IMPORTANTE (${total} ponteiro(s), recuperados sob demanda):`,
149
+ quando: (valor) => ` quando: ${valor}`,
150
+ recuperar: (valor) => ` recuperar: ${valor}`,
151
+ noMomento: (thread, quando) => ` no momento: ork recall ${thread} --fase ${quando}`,
152
+ resumivel: (total) => `RESUMIVEL (${total} resumo(s), com proveniencia declarada):`,
153
+ },
154
+ recall: {
155
+ uso: 'uso: ork recall <thread-id> [--fase FASE] [--id ptr-N] [--todos] [--forcar]',
156
+ titulo: (thread, momento, regime, handoff) => `Recall da thread ${thread} no momento ${momento} (regime efetivo ${regime}, handoff escrito em regime ${handoff})`,
157
+ todos: '(todos)',
158
+ resolvidos: (total) => `RESOLVIDOS (${total}, entram no contexto agora):`,
159
+ via: (via, metodo) => ` via ${via} (${metodo})`,
160
+ location: (valor) => ` location ${valor}`,
161
+ quando: (valor) => ` quando ${valor}`,
162
+ adiados: (total) => `ADIADOS (${total}, existem e NAO entram agora):`,
163
+ onde: (valor) => ` onde ${valor}`,
164
+ recuperar: (thread, fase) => ` recuperar ork recall ${thread} --fase ${fase}`,
165
+ falhas: (total) => `FALHAS (${total}):`,
166
+ motivo: (valor) => ` motivo ${valor}`,
167
+ detalhe: (valor) => ` detalhe ${valor}`,
168
+ },
169
+ lease: {
170
+ titulo: 'Leases do projeto',
171
+ nenhum: ' Nenhum lease tomado. O merge na base esta liberado.',
172
+ situacao: { vencido: 'VENCIDO (tomavel)', ativo: 'ativo' },
173
+ item: (nome, tipo, thread, situacao) => ` ${nome.padEnd(28)} [${tipo}] thread ${thread.padEnd(18)} ${situacao}`,
174
+ periodo: (desde, ate, pid) => ` desde ${desde} ate ${ate} (pid ${pid})`,
175
+ motivo: (valor) => ` motivo: ${valor}`,
176
+ legado: (local) => ` legado: ${local} (vale enquanto vivo, dentro da janela de 30 min da troca)`,
177
+ legadoInvalido: (arquivo) => ` legado: ${arquivo} INVALIDO ou ILEGIVEL (ignorado)`,
178
+ legadoPreservado: ' arquivo legado preservado; ignorado sem alterar o lease canonico',
179
+ filaRetomada: (total) => `Fila de retomada: ${total === 0 ? 'vazia' : `${total} lease(s)`}`,
180
+ candidato: (nome, pid, ticket, idade) => ` ${nome} pid ${pid} ${ticket === null ? 'temporario' : `ticket ${ticket}`} idade ${idade}s`,
181
+ prazo: ' lease.resume-unavailable: prazo de 30 min excedido; repita a aquisicao para recolher e consulte ork lease list',
182
+ filaInsegura: ' lease.resume-unavailable: fila ilegivel ou insegura; inspecione candidatos antes de repetir a aquisicao',
183
+ filaMerge: (total) => `Fila de merge (lease main-tree): ${total === 0 ? 'vazia' : `${total} na espera`}`,
184
+ esperaMerge: (n, thread, desde, por) => ` ${n}. thread ${thread} desde ${desde} (bloqueada por ${por})`,
185
+ filaRegiao: (total) => `Fila por colisao de regiao: ${total === 0 ? 'vazia' : `${total} na espera`}`,
186
+ esperaRegiao: (n, thread, nome, colide, por, desde) => ` ${n}. thread ${thread} quer ${nome}, colide com ${colide} (thread ${por}) desde ${desde}`,
187
+ semMotivo: 'sem motivo declarado',
188
+ usoAcquire: 'uso: ork lease acquire <nome> --thread <thread-id> [--motivo "<motivo>"]',
189
+ adquirido: (nome, tipo, thread) => `Lease ${nome} [${tipo}] adquirido pela thread ${thread}.`,
190
+ expira: (valor) => ` expira em ${valor}`,
191
+ tomado: ' (o lease anterior estava VENCIDO e foi tomado)',
192
+ naoAdquirido: (nome) => `Lease ${nome} NAO adquirido.`,
193
+ motivoTipado: (valor) => ` motivo tipado: ${valor}`,
194
+ detalhe: (valor) => ` detalhe: ${valor}`,
195
+ posicao: (valor) => ` posicao na fila: ${valor}`,
196
+ correcao: (valor) => ` correcao: ${valor}`,
197
+ usoRelease: 'uso: ork lease release <nome> [--thread <thread-id>] [--forcar]',
198
+ desconhecido: (sub) => `subcomando desconhecido: lease ${sub}`,
199
+ },
200
+ board: {
201
+ reapVazio: 'Nenhuma vaga a devolver: toda thread aberta tem procura ativa ou esta pronta para rodar.',
202
+ reapTitulo: (total, fuso) => `Vagas devolvidas por falta de procura ativa: ${total}. ${fuso}`,
203
+ reapMarca: { gravada: 'slot_released gravado no ledger', anterior: 'ja registrado antes (idempotente)' },
204
+ detalhe: (valor) => ` detalhe : ${valor}`,
205
+ evidencia: (valor) => ` evidencia: ${valor}`,
206
+ filaItem: (n, thread, nome, colide, por, desde) => ` ${n}. ${thread} quer ${nome} (colide com ${colide}, thread ${por}) desde ${desde}`,
207
+ planoTitulo: (fuso) => `Escalonador por maquina. ${fuso}`,
208
+ limite: (max, andamento) => ` limite de paralelismo: ${max} (concurrency.max_parallel_threads) | ` +
209
+ `em andamento agora (procura ativa): ${andamento}`,
210
+ nenhumaThread: ' Nenhuma thread no projeto.',
211
+ colunasPlano: ['THREAD', 'SLUG', 'MODO', 'FASE', 'SITUACAO', 'MOTIVO', 'DETALHE'],
212
+ correcoes: ' Correcoes acionaveis:',
213
+ merge: 'Merge queue (lease main-tree, o unico gate de merge)',
214
+ mergeVazia: ' vazia: nenhuma thread esperando para mergear',
215
+ regiao: 'Fila por colisao de regiao',
216
+ regiaoVazia: ' vazia: nenhuma colisao de path, board ou porta',
217
+ titulo: (projeto, threads, perfis, nomes) => `Board do Orkastery, projeto ${projeto} (${threads} thread(s) em ${perfis} perfil(is): ${nomes})`,
218
+ vazio: ' Nenhuma thread ainda. Crie uma com: ork thread new "<nome>" --modo default',
219
+ colunas: ['PERFIL', 'ID', 'SLUG', 'MODO', 'FASE', 'STATUS', 'PAUSAS', 'SCORE', 'WORKTREE', 'LEASES'],
220
+ conducao: 'Conducao agora', variantes: ' Variantes de ciclo em uso:',
221
+ batch: (total) => `Fila de batch scoring: ${total} thread(s) esperando score humano`,
222
+ batchVeja: ' veja em: ork master (com o indice derivado do ledger)',
223
+ desconhecido: (sub) => `subcomando desconhecido: board ${sub}`,
224
+ uso: 'uso: ork board [list|plan|reap] [--all] [--por <quem>] [--json]',
225
+ semRemoto: (projeto, remoto) => `Outras maquinas: o projeto ${projeto} nao tem o remoto ${remoto}; nada foi lido de ork/fabrica-estado.`,
226
+ },
227
+ monitor: {
228
+ desconhecido: (sub) => `subcomando desconhecido: orquestracao ${sub}`,
229
+ uso: 'uso: ork orquestracao status [--all] [--json] [--atencao N] [--so-paradas]',
230
+ atencao: (valor) => `--atencao espera minutos (inteiro >= 0), recebeu "${valor}"`,
231
+ titulo: (projeto, threads, perfis, nomes) => `Monitor de orquestracao, projeto ${projeto} (${threads} thread(s) em ${perfis} perfil(is): ${nomes})`,
232
+ resumo: (humano, impedimento, andamento, avancar, fechadas) => ` aguardando humano: ${humano} | com impedimento: ${impedimento} | em andamento: ${andamento} | ` +
233
+ `podem avancar: ${avancar} | fechadas: ${fechadas}`,
234
+ limite: (minutos, acima) => ` limite de atencao: ${minutos} min (${acima} parada(s) acima, marcadas com !)`,
235
+ runtime: (detalhe) => ` [warn] ${detalhe}: pausa prevista e reportada como valendo`,
236
+ conduzidas: 'Conduzidas agora:',
237
+ nenhuma: ' Nenhuma thread parada: ninguem esperando veredito humano nem impedido.',
238
+ colunas: ['PERFIL', 'THREAD', 'FASE', 'STATUS', 'BLOCO QUE PAUSA', 'AGUARDA DO HUMANO',
239
+ 'IMPEDIMENTO', 'ULTIMO EVENTO', 'PARADA HA'],
240
+ situacoes: {
241
+ 'em-andamento': 'em-andamento', 'pode-avancar': 'pode-avancar', espera: 'espera',
242
+ pausada: 'pausada', fechada: 'fechada',
243
+ },
244
+ nao: 'nao', semLedger: '(sem ledger)',
245
+ esperando: 'Esperando VEREDITO HUMANO agora (o orquestrador deve avisar o humano):',
246
+ impedidas: 'Com IMPEDIMENTO (nao e veredito humano: e colisao, gate, limite ou janela):',
247
+ previstas: 'Pausa PREVISTA, sessao ainda viva (nao avise ainda, mas ja e a proxima fila):',
248
+ parada: (motivo, duracao, desde) => ` [${motivo}] parada ha ${duracao} (desde ${desde})`,
249
+ humanoDecide: (valor) => ` o humano decide: ${valor}`,
250
+ detalhe: (valor) => ` detalhe : ${valor}`,
251
+ evidencia: (valor) => ` evidencia: ${valor}`,
252
+ correcao: (valor) => ` correcao : ${valor}`,
253
+ vaiPausar: (thread, bloco, sobre) => ` ${thread}: ${bloco} vai pausar sobre "${sobre}"`,
254
+ },
255
+ licoes: {
256
+ resumo: (threads) => `Das ${threads} threads ja fechadas pelo MASTER neste produto:`,
257
+ bloqueio: (nome, total, unidade, dica) => `- o bloqueio ${nome} apareceu em ${total} ${unidade}${dica ? `; o que evita: ${dica}` : ''}`,
258
+ classe: (nome, total, unidade, dica) => `- a classe de falha ${nome} fechou ${total} ${unidade}${dica ? `; o que evita: ${dica}` : ''}`,
259
+ nota: (thread, score, justificativa) => `- ${thread} fechou com ${score}/5: ${justificativa}`,
260
+ titulo: 'Licoes que voltam no GOAL e no PLAN da proxima thread',
261
+ nenhuma: 'Nenhuma thread fechada pelo MASTER ainda: nada a ensinar.',
262
+ propostas: (piso, dias) => `Propostas de policy (a mesma falha em ${piso}+ threads nos ultimos ${dias} dias):`,
263
+ propostaNenhuma: ' nenhuma',
264
+ fecho: 'Proposta nao bloqueia nada: vira policy so quando o dono a declara em `policies:` no orkastery.yaml.',
265
+ },
266
+ demo: {
267
+ gitFalhou: (acao, detalhe) => `demo: git ${acao} falhou: ${detalhe}`,
268
+ dirNaoVazio: (dir) => `demo: ${dir} nao esta vazio; a demo cria o proprio repositorio`,
269
+ titulo: 'ork demo: a afirmacao do agente contra a prova',
270
+ passo1: ' 1. O agente entrega soma.js e diz: "soma(2, 2) devolve 4. Pronto."',
271
+ passo2: ' 2. O ork nao aceita relato: reexecuta a prova no commit real.',
272
+ vereditoAntes: (ok, motivos) => ` Veredito: ${ok ? 'VERDADE SUSTENTADA' : `REPROVADO (${motivos})`}. A funcao faz a - b.`,
273
+ passo3: ' 3. O agente corrige soma.js e faz commit.',
274
+ passo4: ' 4. O ork reexecuta a MESMA prova no commit novo.',
275
+ vereditoDepois: (ok, motivos) => ` Veredito: ${ok ? 'VERDADE SUSTENTADA' : `REPROVADO (${motivos})`}.`,
276
+ principio: 'Nenhuma afirmacao vale sem o comando que a julga, reexecutado no commit real.',
277
+ proximo: 'No seu projeto: ork init, depois ork thread new "<pedido>" --modo auto.',
278
+ mantido: (dir) => `(o repositorio da demo ficou em ${dir})`,
279
+ },
280
+ fabrica: {
281
+ publicou: (maquina, threads, commit, tentativas) => `Fabrica: ${maquina} publicou ${threads} thread(s) em ork/fabrica-estado (${commit}, ${tentativas} tentativa(s)).`,
282
+ ocupada: 'Fabrica: outra publicacao desta maquina esta em andamento; tente de novo em instantes.',
283
+ igual: (maquina) => `Fabrica: retrato de ${maquina} igual ao ultimo publicado; nada a enviar (use --forcar para publicar mesmo assim).`,
284
+ soQuandoPede: ' esta maquina nao entrou na fabrica compartilhada: so publica quando voce pede (ork fabrica entrar liga).',
285
+ manifestoPede: ' o orkastery.yaml pede a fabrica compartilhada; quem liga e a maquina, com ork fabrica entrar.',
286
+ entrou: (maquina) => `Fabrica: esta maquina entrou como ${maquina}; publica ao criar thread, despachar fase, entregar e fechar,`,
287
+ primeiro: (threads, commit) => ` e a cada batida do pulse. Primeiro retrato: ${threads} thread(s) em ork/fabrica-estado (${commit}).`,
288
+ maquinaAmbiente: (maquina) => ` AVISO: ORK_MAQUINA=${maquina} neste shell vence o arquivo; alinhe os dois.`,
289
+ saiu: (maquina, commit) => `Fabrica: ${maquina} saiu; nada mais e publicado daqui.` +
290
+ (commit ? ` Retrato removido de ork/fabrica-estado (${commit}).` : ' Nao havia retrato desta maquina na branch.'),
291
+ ambienteLiga: ' AVISO: ORK_FABRICA_COMPARTILHADA=1 neste shell ainda liga a fabrica aqui.',
292
+ desconhecido: (sub) => `subcomando desconhecido: fabrica ${sub}`,
293
+ uso: 'uso: ork fabrica [--json] [--sem-remoto] | fabrica publicar [--forcar] [--json] | fabrica entrar [--maquina NOME] | fabrica sair' +
294
+ ' | fabrica batida [status|instalar|remover] [--por Q] [--json]',
295
+ semRemoto: (projeto, remoto) => `Fabrica: o projeto ${projeto} nao tem o remoto ${remoto}; nada foi lido de ork/fabrica-estado.`,
296
+ estaMaquina: ' (esta maquina)',
297
+ maquina: (nome, propria, por, publicado, ativas, entregues) => `${nome}${propria}, ${por}, publicado ${publicado}: ${ativas} thread(s) ativa(s)` +
298
+ (entregues ? `, ${entregues} entregue(s) sem MASTER` : ''),
299
+ colunas: ['THREAD', 'MODO', 'FASE', 'RUNTIME', 'ITEM', 'ESPERA VOCE', 'SESSAO'],
300
+ espera: (valor) => `sim: ${valor}`,
301
+ veredito: 'veredito',
302
+ copia: 'AVISO: sem leitura nova do remoto; esta e a ultima copia lida nesta maquina.',
303
+ nenhuma: (branch) => `Nenhuma maquina publicou ainda em ${branch}. Publique esta com: ork fabrica publicar`,
304
+ origens: { atual: 'lido agora', copia: 'ultima copia local' },
305
+ outrasNenhuma: (branch, origem) => `Outras maquinas (${branch}, ${origem}): nenhuma publicou ainda.`,
306
+ outras: (branch, origem) => `Outras maquinas (${branch}, ${origem}):`,
307
+ pedida: 'fabrica.nao-confirmada: o orkastery.yaml pede fabrica.compartilhada: true, mas quem liga a publicacao ' +
308
+ 'do retrato desta maquina e a propria maquina, nao o repositorio. Nada foi publicado. Para entrar: ork fabrica entrar',
309
+ batida: {
310
+ titulo: (maquina, projeto) => `Batida da fábrica em ${maquina}, projeto ${projeto}`,
311
+ naoLido: (motivo) => ` crontab: não lido (${motivo}); não dá para dizer se a batida está instalada`,
312
+ naoInstalada: ' instalada: não; instale com: ork fabrica batida instalar',
313
+ horarioIlegivel: 'com horário que o ork não lê', aCada: (min) => `a cada ${min} min`,
314
+ instalada: (ritmo, gerenciada) => ` instalada: sim, ${ritmo}${gerenciada ? ', pelo ork fabrica batida instalar' : ', por linha posta à mão'}`,
315
+ linha: (valor) => ` linha: ${valor}`,
316
+ semRodada: ' última rodada: nenhuma registrada (.orkastery/monitor/hitl.log)',
317
+ rodada: (hora, min, estado, detalhe) => ` última rodada: ${hora} (há ${min} min), ${estado}: ${detalhe}`,
318
+ codigo: (code) => code === 0 ? 'ok' : `código ${code ?? '?'}`,
319
+ semDetalhe: 'sem detalhe',
320
+ atrasada: (min) => ` atrasada: nenhuma rodada há ${min} min com a batida instalada; confira crontab -l e o hitl.log`,
321
+ jaInstalada: (projeto, linha) => `Batida já instalada para ${projeto}; nada mudou no crontab.\n linha: ${linha}`,
322
+ instalou: (projeto, evento) => `Batida instalada para ${projeto} (evento ${evento} no ledger da máquina).`,
323
+ removeu: (projeto, evento) => `Batida removida de ${projeto} (evento ${evento} no ledger da máquina).`,
324
+ nenhumaInstalada: (projeto) => `Nenhuma batida do ork instalada para ${projeto}; nada mudou no crontab.`,
325
+ saiu: (linha) => ` saiu: ${linha}`,
326
+ ficou: (linha) => ` ficou (posta à mão, não é do ork): ${linha}`,
327
+ confira: ' confira com: ork fabrica batida status',
328
+ uso: 'uso: ork fabrica batida [status|instalar|remover] [--por Q] [--json]',
329
+ },
330
+ },
331
+ eval: {
332
+ fixtureFormato: (nome) => `${nome}: esperado { skill, casos[] }`,
333
+ casosMinimos: (casos, minimo) => `${casos} caso(s); o minimo do catalogo e ${minimo}`,
334
+ tipoFaltando: (tipo) => `nenhum caso do tipo "${tipo}"`, idRepetido: 'id repetido no corpus',
335
+ idPrefixo: (skill) => `o id precisa comecar com "${skill}/"`,
336
+ racionalizacao: 'caso de racionalizacao sem o campo `racionalizacao` com a desculpa',
337
+ assercaoPorque: (valor) => `assercao "${valor}" sem o campo \`porque\``,
338
+ padraoInvalido: (valor, detalhe) => `padrao "${valor}" invalido: ${detalhe}`,
339
+ deveriaAusente: (valor, vezes) => `"${valor}" deveria estar AUSENTE da skill e aparece ${vezes}x`,
340
+ naoExiste: (valor, skill, porque) => `"${valor}" nao existe em skills/.../${skill}/SKILL.md (${porque})`,
341
+ ancora: 'todas as ancoras deste caso estao dentro da tabela de racionalizacoes: a skill lista a desculpa mas nao carrega a regra que responde a ela',
342
+ filtroVazio: 'filtro de canários vazio: nenhuma prova foi executada',
343
+ canarioAusente: (id) => `canário solicitado ausente: ${id}`,
344
+ casoAusente: (nome) => `${nome}: falta caso.json`,
345
+ fixtureDiverge: 'id da fixture diverge do canário solicitado',
346
+ semExecutor: (nome, id) => `${nome}: nenhum executor registrado para o canario "${id}"`,
347
+ semGit: 'git nao esta nesta maquina: o canario sai unavailable, nunca passing',
348
+ divergencia: (esperado, observado) => `esperado ${esperado}, observado ${observado}`,
349
+ canarioSemFixture: (id) => `o canario ${id} existe no codigo e nao tem eval/fixtures/${id}/caso.json`,
350
+ skillSemEval: (skill) => `skill sem eval nao entra no catalogo: falta eval/casos/${skill}.json`,
351
+ evalSemSkill: 'ha casos para uma skill que nao existe no catalogo',
352
+ titulo: (catalogo) => `ork eval, catalogo em ${catalogo}`,
353
+ canarios: 'Canarios (comportamento real do nucleo, contra git de verdade)',
354
+ colunasCanarios: ['CANARIO', 'ESTADO', 'SOBRE'],
355
+ estados: { passou: 'passou', unavailable: 'unavailable', falhou: 'falhou' },
356
+ skills: 'Corpus das skills (a metade estatica: as regras que precisam existir no arquivo)',
357
+ colunasSkills: ['SKILL', 'CASOS', 'ASSERCOES', 'FALHAS'], falhas: 'Falhas',
358
+ resumoCanarios: (passaram, total, indisponiveis) => `canarios: ${passaram}/${total} verdes${indisponiveis > 0 ? ` (${indisponiveis} unavailable)` : ''}`,
359
+ resumoSkills: (skills, casos, assercoes, falhas) => `skills: ${skills} | casos: ${casos} | assercoes: ${assercoes} | falhas: ${falhas}`,
360
+ metade: 'metade comportamental (o agente resiste a desculpa?): unavailable, julgada por humano ou por modelo, nunca por este runner',
361
+ veredito: (ok) => `VEREDITO: ${ok ? 'verde' : 'vermelho'}`,
362
+ },
363
+ memory: {
364
+ cli: {
365
+ inventario: (tenant, incluidos, excluidos) => `Inventario do tenant ${tenant}: ${incluidos} incluidos, ${excluidos} excluidos.`,
366
+ fonte: (incluir, arquivo, motivo) => ` ${incluir ? 'incluir' : 'excluir'} ${arquivo}: ${motivo}`,
367
+ migracao: (tenant, confirmados, falhas, excluidos) => `Migracao do tenant ${tenant}: ${confirmados} confirmados, ${falhas} falhas, ${excluidos} excluidos.`,
368
+ tagsUso: 'uso: ork memory search --tags \'{"project":["orkastery"],"skill":["orkastery-decision"]}\'',
369
+ tagsInvalidas: (erro) => `--tags nao e JSON valido: ${erro}`,
370
+ files: (motivo) => `memory.query.files: ${motivo}; resultado nao comprova ausencia na memoria semantica`,
371
+ buscaTag: (regime) => `Busca deterministica por tag (regime ${regime})`,
372
+ correcao: (valor) => ` correcao: ${valor}`,
373
+ entradas: (n) => ` ${n} entrada(s)`,
374
+ indexUso: 'uso: ork memory index [--modelo primario|fallback|todos] [--dry-run] [--json]',
375
+ indexFalha: (regime, motivo, correcao) => `memory.index: regime ${regime} (${motivo}); ${correcao}`,
376
+ universoFalhou: (motivo, detalhe) => `memory.index: ${motivo}; ${detalhe}`,
377
+ universoDetalhe: 'o universo da busca nao foi lido inteiro; nada foi embedado',
378
+ desconhecido: (sub) => `subcomando desconhecido: memory ${sub}`,
379
+ textoExclusivo: 'memory.search.texto-exclusivo: --texto nao combina com --tags, --thread, --restrito nem --janela',
380
+ textoUso: (modos, colecoes, limite) => `uso: ork memory search --texto "<frase>" [--modo ${modos}] [--colecao ${colecoes}] [--limite 1..${limite}] [--json]`,
381
+ buscaUniversoDetalhe: 'o universo da busca nao foi lido inteiro; nada foi buscado',
382
+ syncDetalhe: 'sync nao executado; colisao legada nao foi reavaliada',
383
+ },
384
+ estado: {
385
+ titulo: 'Regime de memoria do projeto', pedido: (v) => ` pedido no manifesto ${v}`,
386
+ efetivo: (v) => ` regime efetivo ${v}`, tenant: (v) => ` tenant ${v}`,
387
+ variavel: (v) => ` variavel da base ${v || '(nao declarada)'}`,
388
+ dsn: (sim) => ` DSN no ambiente ${sim ? 'sim (valor nunca impresso)' : 'nao'}`,
389
+ // RM-069 (D5): com a fonte de arquivo, o arquivo pelo rotulo com `~` e se a DSN esta nele, nunca o valor.
390
+ arquivo: (v) => ` arquivo da base ${v}`,
391
+ dsnNoArquivo: (sim) => ` DSN no arquivo ${sim ? 'sim (valor nunca impresso)' : 'nao'}`,
392
+ cli: (v) => ` cli do OrkMind ${v}`, degradacao: (v) => ` degradacao: ${v}`,
393
+ correcao: (v) => ` correcao: ${v}`,
394
+ continua1: ' O ciclo NAO para por isso: em regime files o handoff continua triado em 3 niveis,',
395
+ continua2: ' os ponteiros continuam `path#ancora` e `ork recall` continua resolvendo.',
396
+ colecoes: (v) => ` colecoes gravadas: ${v}`,
397
+ governanca: ' governanca: source=agent; decision/human exige human_gate comprovado; mandatory=false e regra nunca critical.',
398
+ },
399
+ embeddings: {
400
+ titulo: 'Busca por significado (embeddings, nao deterministica; o recall por tag nao muda)',
401
+ provider: (v) => ` provider ${v}`, desligada: 'none (desligada)',
402
+ chave: (nome, presente) => ` chave ${nome} ${presente ? 'presente' : 'ausente'} no ambiente (valor nunca impresso)`,
403
+ fallback: (v) => ` fallback local ${v}`, naoDeclarado: '(nao declarado)',
404
+ cache: (dim) => `no cache (${dim} dim)`, foraCache: 'ausente do cache',
405
+ deps: (v) => `dependencias ${v}`, depsOk: 'ok', depsAusentes: 'ausentes', depsNaoSondadas: 'nao sondadas',
406
+ ativo: (v, sondado) => ` caminho ativo ${v}${sondado ? '' : ' (ponte nao sondada)'}`,
407
+ universo: (n, colecoes) => ` universo da busca ${n} entrada(s) do tenant: ${colecoes}`,
408
+ fora: (v) => ` fora da busca ${v}`,
409
+ universoFalhou: (v) => ` universo da busca nao lido (${v}); cobertura nao calculada`,
410
+ indice: (modelo, dim, vetores, coerentes, desatualizados) => ` indice ${modelo} / ${dim} dim: ${vetores} vetor(es), ${coerentes ?? '?'} coerente(s), ${desatualizados ?? '?'} desatualizado(s)`,
411
+ cobertura: (v, entradas) => ` cobertura ${v} de ${entradas} entrada(s) do universo da busca`,
412
+ aviso: (v) => ` aviso ${v}`,
413
+ sondaOk: (alvo, ms) => `${alvo} respondeu em ${ms} ms`,
414
+ sondaFalha: (motivo) => `sem resposta (${motivo})`, semCaminho: 'sem caminho ativo',
415
+ sonda: (v) => ` sonda ${v}`, motivo: (v) => ` motivo ${v}`,
416
+ },
417
+ sync: {
418
+ titulo: (regime, thread) => `Sincronizacao de memoria (regime ${regime})${thread ? ` da thread ${thread}` : ''}`,
419
+ perfil: (perfil, fora) => `Perfil: ${perfil}; fora do perfil: ${fora || '(nenhuma)'}`,
420
+ pendente: (motivo) => `Publicacao pendente: ${motivo}`,
421
+ entradas: (nome, total, detalhe) => ` ${nome.padEnd(10)} ${total} entrada(s): ${detalhe}`,
422
+ humanos: (elegiveis, excluidos, falhas) => ` human_gate ${elegiveis} elegiveis, ${excluidos} excluidos, ${falhas} falhas`,
423
+ gravacao: (nome, valor) => ` ${nome.padEnd(10)} ${valor}`,
424
+ jaExiste: 'ja existente', gravado: 'gravado', naoGravado: (v) => `nao gravado: ${v}`,
425
+ nada: '(nada a gravar)', total: (n, falhas) => ` total ${n} tentativa(s), ${falhas} sem gravacao`,
426
+ correcao: (v) => ` correcao: ${v}`,
427
+ },
428
+ indice: {
429
+ custoNaoEstimado: 'nao estimado', semModelo: '(sem modelo)',
430
+ titulo: (alvo, dry, modelo, dim) => `Indice vetorial (${alvo}${dry ? ', --dry-run' : ''}): ${modelo}${dim ? ` / ${dim} dim` : ''}`,
431
+ universo: (n, colecoes, coerentes) => ` universo da busca ${n} entrada(s): ${colecoes}; coerentes ${coerentes}`,
432
+ fora: (v) => ` fora da busca ${v}`,
433
+ embedados: (n, reescritos, removidos) => ` embedados ${n} (reescritos ${reescritos}); removidos ${removidos}`,
434
+ recusados: (n, limite) => ` fora do indice ${n} recusada(s) por padrao de segredo, ${limite} acima do limite`,
435
+ truncados: (n) => ` truncados ${n} acima do contexto do modelo local, embedados pelo comeco`,
436
+ estimativa: (tokens, custo, chamadas) => ` estimativa ${tokens} token(s), ${custo}; chamadas ao provider ${chamadas}`,
437
+ arquivo: (v) => ` arquivo ${v}`, motivo: (m, d) => ` motivo ${m}: ${d}`,
438
+ foraMedido: (injecao, expiradas, outras) => `${injecao} com injection_risk e ${expiradas} expirada(s) (governanca da biblioteca), ${outras} em outras colecoes (fora da busca do ork); nada disso vai ao embed`,
439
+ foraNaoMedido: 'nao medido nesta base',
440
+ },
441
+ busca: {
442
+ titulo: (modo, origem, modelo) => `Busca por significado (NAO deterministica; modo ${modo}, origem ${origem}${modelo ? ` ${modelo}` : ''})`,
443
+ motivo: (v, detalhe) => ` motivo: ${v}${detalhe ? `; ${detalhe}` : ''}`,
444
+ detalhe: (v) => ` detalhe: ${v}`, similaridade: (v) => ` similaridade ${v}`,
445
+ resumo: (n) => ` ${n} resultado(s); busca por tag continua em ork memory search --tags`,
446
+ },
447
+ },
448
+ mcp: {
449
+ uso: 'uso: ork mcp serve|install --project <raiz absoluta> --host codex|claude-code [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... somente install forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate somente install Codex] [--dry-run somente install]',
450
+ erro: (detalhe) => `mcp: ${detalhe}`,
451
+ simulacao: 'Simulacao: nenhuma escrita.',
452
+ preparada: 'Configuracao MCP preparada.',
453
+ inicio: 'Abra uma nova sessao neste projeto, conclua o consentimento nativo solicitado pelo cliente e confira a descoberta das ferramentas ork_*.',
454
+ ativacao: 'Ativacao e uso ainda pendentes de verificacao no cliente. Respostas automaticas de elicitation nao devem estar habilitadas para decisoes do dono.',
455
+ },
456
+ };
457
+ exports.OPERACAO_RESTANTE_EN = {
458
+ sessions: {
459
+ atencao: (value) => `--atencao expects minutes (integer >= 0), received "${value}"`,
460
+ usoWatch: 'usage: ork sessions watch --thread T [--sessao ID] [--once]',
461
+ sessaoDaThread: 'session does not belong to the thread',
462
+ usoEvent: 'usage: ork sessions event --tipo <type> --sessao <id> < payload.json (maximum 16384 bytes)',
463
+ eventoRecusado: (detail) => `event rejected: ${detail}`,
464
+ exigeProjeto: 'ork sessions limpar-fantasmas requires a project (orkastery.yaml)',
465
+ request: 'sessions request requires thread, UUID, --fase, and --runtime; --pergunta only checks the native content',
466
+ answer: 'sessions answer requires thread, request, and an authenticated envelope on --stdin',
467
+ reconcile: 'sessions reconcile requires thread and request',
468
+ supersede: 'sessions supersede requires thread, UUID, --fase, and --runtime',
469
+ usoSub: (sub) => `usage: ork sessions ${sub} <session>`,
470
+ desconhecido: (sub) => `unknown subcommand: sessions ${sub}`,
471
+ inventario: {
472
+ abertura: (global, user, history) => `${global ? 'Global' : 'Project'} inventory for account ${user}; history: ${history ? 'included' : 'omitted'}.`,
473
+ fontes: (value) => `Sources: ${value}`,
474
+ fonteEstado: { ausente: 'missing', ok: 'ok', falha: 'FAILED' },
475
+ resumo: (total, unbound, ambiguous, ghosts, ok) => `Total: ${total}; without thread: ${unbound}; ambiguous: ${ambiguous}; ghosts: ${ghosts}; query: ${ok ? 'valid' : 'INCOMPLETE'}.`,
476
+ colunas: ['ID', 'RUNTIME', 'PROFILE', 'STATE', 'THREAD/PHASE'],
477
+ processo: 'process', desconhecido: 'unknown', fantasma: 'ghost', fora: '(outside ork)',
478
+ explicacaoFantasma: 'Ghost: record without a live process; it occupies no slot. `ork sessions limpar-fantasmas` releases the ork link without touching the runtime.',
479
+ falha: (detail) => `Failure: ${detail}`,
480
+ ausente: (detail, fix) => `Missing: ${detail}${fix ? `; fix: ${fix}` : ''}`,
481
+ },
482
+ localizar: {
483
+ ambigua: (key, accounts) => `session "${key}" found in more than one account: ${accounts}; use the full id`,
484
+ ausente: (key, failures) => `session "${key}" not found in the runtime${failures ? `; accounts without a response: ${failures}` : ''}`,
485
+ parada: (id, profile) => `session ${id} stopped${profile ? ` (profile ${profile})` : ''}`,
486
+ },
487
+ limpeza: {
488
+ nenhuma: (partial) => `No ghost session${partial ? ' in the accounts that responded' : ''}.`,
489
+ falha: (detail) => `Failure: ${detail}`,
490
+ acoes: {
491
+ soltaria: 'would release (sessao_morta in the ledger)', solto: 'released: sessao_morta in the ledger',
492
+ jaSolto: 'already closed in the ledger', semThread: 'outside ork: nothing to release',
493
+ outroProjeto: 'linked to another project: run it there',
494
+ },
495
+ abertura: (dryRun) => `Ghost sessions (no pid and no process)${dryRun ? ', dry run: nothing was written' : ''}. The runtime was not touched.`,
496
+ colunas: ['ID', 'PROFILE', 'THREAD/PHASE', 'ACTION'],
497
+ processo: 'process',
498
+ },
499
+ radar: {
500
+ titulo: (total) => `Runtime session radar (${total} session(s) on this machine)`,
501
+ resumo: (human, hitl, abandoned, failures, unknown, working, outside) => ` need a human: ${human} (live HITL ${hitl}, abandoned ${abandoned}, failure ${failures}, ` +
502
+ `unknown state ${unknown}) | working: ${working} | outside ork: ${outside}`,
503
+ limite: (minutes, above) => ` attention threshold: ${minutes} min (${above} stopped above it, marked with !)`,
504
+ falha: (detail) => ` [fail] ${detail}: cannot tell who is stopped`,
505
+ semLogs: ' [warn] --sem-logs: the radar says WHO is stopped, but not WHAT each session is asking',
506
+ nenhuma: ' No session in this scan.',
507
+ colunas: ['ID', 'NAME', 'CLASS', 'STATE', 'TYPE', 'DIRECTORY', 'THREAD', 'AGE'],
508
+ vazio: '(empty)', fora: 'outside ork', nenhumaEsperando: ' No session is waiting for a human.',
509
+ vivas: 'Waiting for a HUMAN now, with the job LIVE (answering unblocks it immediately):',
510
+ mortas: 'DIED waiting for an answer (the job exited; answering no longer helps and the work stopped):',
511
+ onde: 'where', porque: 'why', pergunta: 'question', log: 'log', opcao: 'option',
512
+ parada: 'stopped for', viva: 'alive for', ver: 'view', responder: 'answer', recomendo: 'recommend',
513
+ thread: (id, phase) => `thread ${id}, phase ${phase}`,
514
+ sessaoFora: 'session outside ork',
515
+ paradaDesconhecida: 'unknown; record with --registrar',
516
+ desdeObservacao: 'since the first observation', idade: 'session age', desdeInicio: 'since the session started',
517
+ },
518
+ },
519
+ gate: {
520
+ usoContext: 'usage: ork gate context <thread> <request> [--native-offer-stdin]',
521
+ requestThread: 'gate request requires a thread',
522
+ formato: 'gate request: --formato telegram|terminal',
523
+ answer: 'gate answer requires thread, request, and --resposta-stdin',
524
+ usoNext: 'usage: ork gate next <thread-id> [--proximo PHASE] [--ocupacao 0..1]',
525
+ approveAposentado: 'gate approve is retired: approval without a request is refused. Use ork gate request <thread-id> and answer through authenticated human ingress.',
526
+ registrado: (thread) => `Human authorization recorded in the ledger of thread ${thread}.`,
527
+ sobre: (value) => ` subject ${value}`,
528
+ autorizado: (value) => ` authorized by ${value}`,
529
+ quando: (value) => ` when ${value}`,
530
+ desconhecido: (sub) => `unknown subcommand: gate ${sub}`,
531
+ tokens: {
532
+ titulo: (thread) => `ork gate next: thread ${thread}`,
533
+ ocupacao: (value) => ` occupancy ${value}`,
534
+ naoMedivel: 'not measurable',
535
+ fonte: (value) => ` source ${value}`,
536
+ detalhe: (value) => ` ${value}`,
537
+ limiares: (rotate, force) => ` thresholds rotate_above ${rotate} | force_rotate_above ${force}`,
538
+ proximo: (phase, weight) => ` next step ${phase} (${weight})`,
539
+ pesado: 'heavy', leve: 'light',
540
+ veredito: (value, source) => `VERDICT: ${value} (decided by ${source})`,
541
+ razao: (value) => ` reason: ${value}`,
542
+ slug: (value) => ` new session slug: ${value}`,
543
+ handoff: (thread, phase) => ` next step: ork handoff export ${thread} --proxima-fase ${phase}`,
544
+ ledger: (thread) => `Recorded in the ledger as token_gate: ork phase list ${thread}`,
545
+ localizarDetalhe: (source, value) => {
546
+ if (source === 'unavailable' && value.startsWith('transcript informado nao existe: '))
547
+ return value.replace('transcript informado nao existe: ', 'provided transcript does not exist: ');
548
+ if (source === 'estimated')
549
+ return value
550
+ .replace(/^estimativa por tamanho: /, 'size estimate: ')
551
+ .replace(/ bytes por token = ~/, ' bytes per token = ~')
552
+ .replace(/ tokens de uma janela nominal de /, ' tokens in a nominal window of ');
553
+ if (source === 'runtime_reported')
554
+ return value.replace(/^uso de contexto lido do runtime para a sessao /, 'context usage read from the runtime for session ');
555
+ if (source === 'informada')
556
+ return value.replace(/^ocupacao ([\d.]+)% declarada pelo chamador como fonte /, '$1% occupancy declared by the caller as source ');
557
+ return value.replace('o adapter claude-bg nao expoe uso de contexto nesta versao do runtime; nenhuma outra fonte foi informada', 'the claude-bg adapter does not expose context usage in this runtime version; no other source was provided');
558
+ },
559
+ localizarRazao: (occupancy, rotate, force, heavy, redo, next, value) => {
560
+ if (occupancy === null)
561
+ return 'window occupancy is not measurable (source unavailable): rotation is NOT decided from ' +
562
+ 'missing data. Continue in the same session and rotate by explicit decision if needed.';
563
+ const pct = (occupancy * 100).toFixed(1);
564
+ if (occupancy >= force)
565
+ return `occupancy ${pct}% >= force_rotate_above (${(force * 100).toFixed(0)}%): ` +
566
+ 'always rotate, regardless of the weight of the next step.';
567
+ if (occupancy >= rotate && heavy)
568
+ return `occupancy ${pct}% >= rotate_above (${(rotate * 100).toFixed(0)}%) and the next step is heavy ` +
569
+ `(${redo ? 'redo failed phase' : next}): more window means more accuracy.`;
570
+ if (occupancy >= rotate)
571
+ return `occupancy ${pct}% >= rotate_above, but the next step (${next}) is not heavy: continue in the same session.`;
572
+ if (Number.isFinite(occupancy))
573
+ return `occupancy ${pct}% below rotate_above (${(rotate * 100).toFixed(0)}%): continue in the same session.`;
574
+ return value;
575
+ },
576
+ },
577
+ },
578
+ fix: {
579
+ usoOpen: 'usage: ork fix open <thread-id> [--so-claims] [--reverify]',
580
+ usoList: 'usage: ork fix list <thread-id> [--rodada N]',
581
+ semRodada: (thread) => `Thread ${thread} has no GO-FIX round. Open one with: ork fix open ${thread}`,
582
+ lista: (round, thread) => `Fixes from round ${round} of thread ${thread}`,
583
+ colunasLista: ['ID', 'TYPE', 'REASON', 'TARGET', 'STATE', 'JUDGED BY'],
584
+ usoReverify: 'usage: ork fix reverify <thread-id> [--rodada N] [--parcial]',
585
+ desconhecido: (sub) => `unknown subcommand: fix ${sub}`,
586
+ semCorrecoes: (thread) => `Thread ${thread}: CHECK PASSED on the real HEAD; there is no fix to open.\n` +
587
+ ' (no blocking typed reason in `ork verify`)',
588
+ aberto: (thread, round) => `GO-FIX opened for thread ${thread} (round ${round})`,
589
+ veredito: (value) => ` CHECK verdict ${value}`,
590
+ motivos: (value) => ` typed reasons ${value}`,
591
+ reexecucao: (typeB) => ` rerun ${typeB ? 'FULL required (there is a type B fix)' : 'partial allowed (type A-only round)'}`,
592
+ colunas: ['ID', 'TYPE', 'REASON', 'TARGET', 'JUDGED BY'],
593
+ verifyCompleto: '(full verify)',
594
+ spec: 'Exact spec dispatched to GO-FIX:',
595
+ reverify: (thread, round) => `CHECK-REVERIFY for thread ${thread} (round ${round})`,
596
+ cobertura: (value) => ` coverage ${value}`,
597
+ rodadas: (rounds, limit) => ` rounds ${rounds} of ${limit} before escalation`,
598
+ porCorrecao: 'Verdict by fix:',
599
+ correcao: (id, type, approved, target) => ` ${id} type ${type} ${approved ? 'APPROVED' : 'FAILED'} ${target}`,
600
+ origem: (value) => ` source reason: ${value}`,
601
+ execucao: (ok, command) => ` ${ok ? 'ok ' : 'FAILED'} ${command}`,
602
+ verify: (commit, ok, reasons) => `Full verify on HEAD ${commit}: ${ok ? 'green' : `failed (${reasons})`}`,
603
+ final: (value) => `Final verdict: ${value}`,
604
+ escalado: ' ESCALATED TO A HUMAN: this pause applies in every mode, including #Auto.',
605
+ vereditos: { PASSOU: 'PASSED', 'PRECISA DE MUDANCA': 'NEEDS CHANGES', BLOQUEADO: 'BLOCKED' },
606
+ coberturas: { completa: 'full', parcial: 'partial' },
607
+ },
608
+ handoff: {
609
+ usoExport: 'usage: ork handoff export <thread-id> [--proxima-fase PHASE]',
610
+ historico: (path) => `History: ${path}`,
611
+ usoRecall: 'usage: ork handoff recall <thread-id> <path#anchor>',
612
+ resolvido: (location) => `Pointer resolved: ${location}`,
613
+ metodo: (value) => ` method ${value}`,
614
+ sha: (value) => ` sha256 ${value}`,
615
+ linhas: (value) => ` lines ${value}`,
616
+ naoAplicavel: '(not applicable)',
617
+ desconhecido: (sub) => `unknown subcommand: handoff ${sub}`,
618
+ exportado: (thread, memory) => `Handoff exported from thread ${thread} (memory regime: ${memory})`,
619
+ de: (slug, phase) => ` from ${slug} (phase ${phase})`,
620
+ para: (slug, phase) => ` to ${slug} (phase ${phase})`,
621
+ arquivo: (file) => ` file ${file}`,
622
+ critico: (total) => `CRITICAL (${total} item(s), included inline in the new session prompt):`,
623
+ proveniencia: (location, sha) => ` provenance: ${location} (sha256 ${sha})`,
624
+ importante: (total) => `IMPORTANT (${total} pointer(s), retrieved on demand):`,
625
+ quando: (value) => ` when: ${value}`,
626
+ recuperar: (value) => ` retrieve: ${value}`,
627
+ noMomento: (thread, when) => ` at that time: ork recall ${thread} --fase ${when}`,
628
+ resumivel: (total) => `SUMMARIZABLE (${total} summary item(s), with declared provenance):`,
629
+ },
630
+ recall: {
631
+ uso: 'usage: ork recall <thread-id> [--fase PHASE] [--id ptr-N] [--todos] [--forcar]',
632
+ titulo: (thread, moment, regime, handoff) => `Recall for thread ${thread} at ${moment} (effective regime ${regime}, handoff written under regime ${handoff})`,
633
+ todos: '(all)',
634
+ resolvidos: (total) => `RESOLVED (${total}, entering context now):`,
635
+ via: (via, method) => ` via ${via} (${method})`,
636
+ location: (value) => ` location ${value}`,
637
+ quando: (value) => ` when ${value}`,
638
+ adiados: (total) => `DEFERRED (${total}, they exist and do NOT enter now):`,
639
+ onde: (value) => ` where ${value}`,
640
+ recuperar: (thread, phase) => ` retrieve ork recall ${thread} --fase ${phase}`,
641
+ falhas: (total) => `FAILURES (${total}):`,
642
+ motivo: (value) => ` reason ${value}`,
643
+ detalhe: (value) => ` detail ${value}`,
644
+ },
645
+ lease: {
646
+ titulo: 'Project leases',
647
+ nenhum: ' No lease held. Merging into the base is available.',
648
+ situacao: { vencido: 'EXPIRED (can be taken)', ativo: 'active' },
649
+ item: (name, type, thread, state) => ` ${name.padEnd(28)} [${type}] thread ${thread.padEnd(18)} ${state}`,
650
+ periodo: (from, to, pid) => ` from ${from} to ${to} (pid ${pid})`,
651
+ motivo: (value) => ` reason: ${value}`,
652
+ legado: (location) => ` legacy: ${location} (valid while live, within the 30-minute migration window)`,
653
+ legadoInvalido: (file) => ` legacy: ${file} INVALID or UNREADABLE (ignored)`,
654
+ legadoPreservado: ' legacy file preserved; ignored without changing the canonical lease',
655
+ filaRetomada: (total) => `Resume queue: ${total === 0 ? 'empty' : `${total} lease(s)`}`,
656
+ candidato: (name, pid, ticket, age) => ` ${name} pid ${pid} ${ticket === null ? 'temporary' : `ticket ${ticket}`} age ${age}s`,
657
+ prazo: ' lease.resume-unavailable: 30-minute window exceeded; acquire again to collect it and check ork lease list',
658
+ filaInsegura: ' lease.resume-unavailable: unreadable or unsafe queue; inspect candidates before acquiring again',
659
+ filaMerge: (total) => `Merge queue (lease main-tree): ${total === 0 ? 'empty' : `${total} waiting`}`,
660
+ esperaMerge: (n, thread, since, by) => ` ${n}. thread ${thread} since ${since} (blocked by ${by})`,
661
+ filaRegiao: (total) => `Region collision queue: ${total === 0 ? 'empty' : `${total} waiting`}`,
662
+ esperaRegiao: (n, thread, name, collision, by, since) => ` ${n}. thread ${thread} wants ${name}, collides with ${collision} (thread ${by}) since ${since}`,
663
+ semMotivo: 'no reason declared',
664
+ usoAcquire: 'usage: ork lease acquire <name> --thread <thread-id> [--motivo "<reason>"]',
665
+ adquirido: (name, type, thread) => `Lease ${name} [${type}] acquired by thread ${thread}.`,
666
+ expira: (value) => ` expires at ${value}`,
667
+ tomado: ' (the previous lease had EXPIRED and was taken)',
668
+ naoAdquirido: (name) => `Lease ${name} was NOT acquired.`,
669
+ motivoTipado: (value) => ` typed reason: ${value}`,
670
+ detalhe: (value) => ` detail: ${value}`,
671
+ posicao: (value) => ` queue position: ${value}`,
672
+ correcao: (value) => ` fix: ${value}`,
673
+ usoRelease: 'usage: ork lease release <name> [--thread <thread-id>] [--forcar]',
674
+ desconhecido: (sub) => `unknown subcommand: lease ${sub}`,
675
+ },
676
+ board: {
677
+ reapVazio: 'No slot to return: every open thread is actively seeking work or ready to run.',
678
+ reapTitulo: (total, zone) => `Slots returned for lack of active demand: ${total}. ${zone}`,
679
+ reapMarca: { gravada: 'slot_released recorded in the ledger', anterior: 'already recorded (idempotent)' },
680
+ detalhe: (value) => ` detail : ${value}`,
681
+ evidencia: (value) => ` evidence : ${value}`,
682
+ filaItem: (n, thread, name, collision, by, since) => ` ${n}. ${thread} wants ${name} (collides with ${collision}, thread ${by}) since ${since}`,
683
+ planoTitulo: (zone) => `Per-machine scheduler. ${zone}`,
684
+ limite: (max, running) => ` parallelism limit: ${max} (concurrency.max_parallel_threads) | ` +
685
+ `running now (active demand): ${running}`,
686
+ nenhumaThread: ' No thread in the project.',
687
+ colunasPlano: ['THREAD', 'SLUG', 'MODE', 'PHASE', 'SITUATION', 'REASON', 'DETAIL'],
688
+ correcoes: ' Actionable fixes:',
689
+ merge: 'Merge queue (lease main-tree, the only merge gate)',
690
+ mergeVazia: ' empty: no thread waiting to merge',
691
+ regiao: 'Region collision queue',
692
+ regiaoVazia: ' empty: no path, board, or port collision',
693
+ titulo: (project, threads, profiles, names) => `Orkastery board, project ${project} (${threads} thread(s) in ${profiles} profile(s): ${names})`,
694
+ vazio: ' No thread yet. Create one with: ork thread new "<name>" --modo default',
695
+ colunas: ['PROFILE', 'ID', 'SLUG', 'MODE', 'PHASE', 'STATUS', 'PAUSES', 'SCORE', 'WORKTREE', 'LEASES'],
696
+ conducao: 'Conduction now', variantes: ' Cycle variants in use:',
697
+ batch: (total) => `Batch scoring queue: ${total} thread(s) waiting for a human score`,
698
+ batchVeja: ' see: ork master (with the ledger-derived index)',
699
+ desconhecido: (sub) => `unknown subcommand: board ${sub}`,
700
+ uso: 'usage: ork board [list|plan|reap] [--all] [--por <who>] [--json]',
701
+ semRemoto: (project, remote) => `Other machines: project ${project} has no ${remote} remote; nothing was read from ork/fabrica-estado.`,
702
+ },
703
+ monitor: {
704
+ desconhecido: (sub) => `unknown subcommand: orquestracao ${sub}`,
705
+ uso: 'usage: ork orquestracao status [--all] [--json] [--atencao N] [--so-paradas]',
706
+ atencao: (value) => `--atencao expects minutes (integer >= 0), received "${value}"`,
707
+ titulo: (project, threads, profiles, names) => `Orchestration monitor, project ${project} (${threads} thread(s) in ${profiles} profile(s): ${names})`,
708
+ resumo: (human, impediment, running, advance, closed) => ` waiting for a human: ${human} | with an impediment: ${impediment} | running: ${running} | ` +
709
+ `can advance: ${advance} | closed: ${closed}`,
710
+ limite: (minutes, above) => ` attention threshold: ${minutes} min (${above} stopped above it, marked with !)`,
711
+ runtime: (detail) => ` [warn] ${detail}: planned pause reported as active`,
712
+ conduzidas: 'Being conducted now:',
713
+ nenhuma: ' No stopped thread: nobody waiting for a human verdict or blocked.',
714
+ colunas: ['PROFILE', 'THREAD', 'PHASE', 'STATUS', 'PAUSING BLOCK', 'WAITING FOR HUMAN',
715
+ 'IMPEDIMENT', 'LAST EVENT', 'STOPPED FOR'],
716
+ situacoes: {
717
+ 'em-andamento': 'running', 'pode-avancar': 'can-advance', espera: 'waiting',
718
+ pausada: 'paused', fechada: 'closed',
719
+ },
720
+ nao: 'no', semLedger: '(no ledger)',
721
+ esperando: 'Waiting for a HUMAN VERDICT now (the orchestrator must notify the human):',
722
+ impedidas: 'With an IMPEDIMENT (not a human verdict: collision, gate, limit, or window):',
723
+ previstas: 'PLANNED pause, session still alive (do not notify yet; it is already the next queue):',
724
+ parada: (reason, duration, since) => ` [${reason}] stopped for ${duration} (since ${since})`,
725
+ humanoDecide: (value) => ` the human decides: ${value}`,
726
+ detalhe: (value) => ` detail : ${value}`,
727
+ evidencia: (value) => ` evidence : ${value}`,
728
+ correcao: (value) => ` fix : ${value}`,
729
+ vaiPausar: (thread, block, subject) => ` ${thread}: ${block} will pause for "${subject}"`,
730
+ },
731
+ licoes: {
732
+ resumo: (threads) => `From the ${threads} threads already closed by MASTER in this product:`,
733
+ bloqueio: (name, total, unit, hint) => `- the ${name} block occurred in ${total} ${unit}${hint ? `; how to prevent it: ${hint}` : ''}`,
734
+ classe: (name, total, unit, hint) => `- the ${name} failure class closed ${total} ${unit}${hint ? `; how to prevent it: ${hint}` : ''}`,
735
+ nota: (thread, score, reason) => `- ${thread} closed with ${score}/5: ${reason}`,
736
+ titulo: 'Lessons brought into the next thread\'s GOAL and PLAN',
737
+ nenhuma: 'No thread closed by MASTER yet: nothing to teach.',
738
+ propostas: (floor, days) => `Policy proposals (the same failure in ${floor}+ threads over the last ${days} days):`,
739
+ propostaNenhuma: ' none',
740
+ fecho: 'A proposal blocks nothing: it becomes policy only when the owner declares it under `policies:` in orkastery.yaml.',
741
+ },
742
+ demo: {
743
+ gitFalhou: (action, detail) => `demo: git ${action} failed: ${detail}`,
744
+ dirNaoVazio: (dir) => `demo: ${dir} is not empty; the demo creates its own repository`,
745
+ titulo: 'ork demo: the agent\'s claim against the evidence',
746
+ passo1: ' 1. The agent delivers soma.js and says: "soma(2, 2) returns 4. Done."',
747
+ passo2: ' 2. ork does not accept self-reporting: it reruns the evidence on the real commit.',
748
+ vereditoAntes: (ok, reasons) => ` Verdict: ${ok ? 'CLAIM SUPPORTED' : `FAILED (${reasons})`}. The function computes a - b.`,
749
+ passo3: ' 3. The agent fixes soma.js and commits it.',
750
+ passo4: ' 4. ork reruns the SAME evidence on the new commit.',
751
+ vereditoDepois: (ok, reasons) => ` Verdict: ${ok ? 'CLAIM SUPPORTED' : `FAILED (${reasons})`}.`,
752
+ principio: 'No claim counts without the command that judges it, rerun on the real commit.',
753
+ proximo: 'In your project: ork init, then ork thread new "<request>" --modo auto.',
754
+ mantido: (dir) => `(the demo repository was kept at ${dir})`,
755
+ },
756
+ fabrica: {
757
+ publicou: (machine, threads, commit, attempts) => `Factory: ${machine} published ${threads} thread(s) to ork/fabrica-estado (${commit}, ${attempts} attempt(s)).`,
758
+ ocupada: 'Factory: another publication from this machine is in progress; try again shortly.',
759
+ igual: (machine) => `Factory: snapshot from ${machine} matches the last publication; nothing to send (use --forcar to publish anyway).`,
760
+ soQuandoPede: ' this machine has not joined the shared factory: it publishes only when requested (ork fabrica entrar enables it).',
761
+ manifestoPede: ' orkastery.yaml requests the shared factory; the machine enables it with ork fabrica entrar.',
762
+ entrou: (machine) => `Factory: this machine joined as ${machine}; it publishes when creating a thread, dispatching a phase, delivering, and closing,`,
763
+ primeiro: (threads, commit) => ` and on every pulse heartbeat. First snapshot: ${threads} thread(s) in ork/fabrica-estado (${commit}).`,
764
+ maquinaAmbiente: (machine) => ` WARNING: ORK_MAQUINA=${machine} in this shell overrides the file; align both values.`,
765
+ saiu: (machine, commit) => `Factory: ${machine} left; nothing else is published from here.` +
766
+ (commit ? ` Snapshot removed from ork/fabrica-estado (${commit}).` : ' There was no snapshot for this machine on the branch.'),
767
+ ambienteLiga: ' WARNING: ORK_FABRICA_COMPARTILHADA=1 in this shell still enables the factory here.',
768
+ desconhecido: (sub) => `unknown subcommand: fabrica ${sub}`,
769
+ uso: 'usage: ork fabrica [--json] [--sem-remoto] | fabrica publicar [--forcar] [--json] | fabrica entrar [--maquina NAME] | fabrica sair' +
770
+ ' | fabrica batida [status|instalar|remover] [--por Q] [--json]',
771
+ semRemoto: (project, remote) => `Factory: project ${project} has no ${remote} remote; nothing was read from ork/fabrica-estado.`,
772
+ estaMaquina: ' (this machine)',
773
+ maquina: (name, own, by, published, active, delivered) => `${name}${own}, ${by}, published ${published}: ${active} active thread(s)` +
774
+ (delivered ? `, ${delivered} delivered without MASTER` : ''),
775
+ colunas: ['THREAD', 'MODE', 'PHASE', 'RUNTIME', 'ITEM', 'WAITS FOR YOU', 'SESSION'],
776
+ espera: (value) => `yes: ${value}`,
777
+ veredito: 'verdict',
778
+ copia: 'WARNING: no fresh read from the remote; this is the last copy read on this machine.',
779
+ nenhuma: (branch) => `No machine has published to ${branch} yet. Publish this one with: ork fabrica publicar`,
780
+ origens: { atual: 'read now', copia: 'last local copy' },
781
+ outrasNenhuma: (branch, source) => `Other machines (${branch}, ${source}): none has published yet.`,
782
+ outras: (branch, source) => `Other machines (${branch}, ${source}):`,
783
+ pedida: 'fabrica.nao-confirmada: orkastery.yaml requests fabrica.compartilhada: true, but publication of this ' +
784
+ 'machine snapshot is enabled by the machine itself, not the repository. Nothing was published. To join: ork fabrica entrar',
785
+ batida: {
786
+ titulo: (machine, project) => `Factory heartbeat on ${machine}, project ${project}`,
787
+ naoLido: (reason) => ` crontab: not read (${reason}); cannot tell whether the heartbeat is installed`,
788
+ naoInstalada: ' installed: no; install with: ork fabrica batida instalar',
789
+ horarioIlegivel: 'on a schedule ork cannot read', aCada: (min) => `every ${min} min`,
790
+ instalada: (pace, managed) => ` installed: yes, ${pace}${managed ? ', by ork fabrica batida instalar' : ', by a manually added line'}`,
791
+ linha: (value) => ` line: ${value}`,
792
+ semRodada: ' last run: none recorded (.orkastery/monitor/hitl.log)',
793
+ rodada: (time, min, state, detail) => ` last run: ${time} (${min} min ago), ${state}: ${detail}`,
794
+ codigo: (code) => code === 0 ? 'ok' : `code ${code ?? '?'}`,
795
+ semDetalhe: 'no detail',
796
+ atrasada: (min) => ` late: no run for ${min} min with the heartbeat installed; check crontab -l and hitl.log`,
797
+ jaInstalada: (project, line) => `Heartbeat already installed for ${project}; crontab did not change.\n line: ${line}`,
798
+ instalou: (project, event) => `Heartbeat installed for ${project} (event ${event} in the machine ledger).`,
799
+ removeu: (project, event) => `Heartbeat removed from ${project} (event ${event} in the machine ledger).`,
800
+ nenhumaInstalada: (project) => `No ork heartbeat installed for ${project}; crontab did not change.`,
801
+ saiu: (line) => ` removed: ${line}`,
802
+ ficou: (line) => ` kept (manually added, not owned by ork): ${line}`,
803
+ confira: ' check with: ork fabrica batida status',
804
+ uso: 'usage: ork fabrica batida [status|instalar|remover] [--por Q] [--json]',
805
+ },
806
+ },
807
+ eval: {
808
+ fixtureFormato: (name) => `${name}: expected { skill, casos[] }`,
809
+ casosMinimos: (cases, minimum) => `${cases} case(s); the catalog minimum is ${minimum}`,
810
+ tipoFaltando: (type) => `no case of type "${type}"`, idRepetido: 'duplicate id in the corpus',
811
+ idPrefixo: (skill) => `the id must start with "${skill}/"`,
812
+ racionalizacao: 'rationalization case without the `racionalizacao` field containing the excuse',
813
+ assercaoPorque: (value) => `assertion "${value}" without the \`porque\` field`,
814
+ padraoInvalido: (value, detail) => `invalid pattern "${value}": ${detail}`,
815
+ deveriaAusente: (value, times) => `"${value}" should be ABSENT from the skill and appears ${times} time(s)`,
816
+ naoExiste: (value, skill, why) => `"${value}" does not exist in skills/.../${skill}/SKILL.md (${why})`,
817
+ ancora: 'every anchor in this case is inside the rationalizations table: the skill lists the excuse but does not carry the rule that answers it',
818
+ filtroVazio: 'empty canary filter: no evidence was executed',
819
+ canarioAusente: (id) => `requested canary is missing: ${id}`,
820
+ casoAusente: (name) => `${name}: caso.json is missing`,
821
+ fixtureDiverge: 'fixture id differs from the requested canary',
822
+ semExecutor: (name, id) => `${name}: no executor registered for canary "${id}"`,
823
+ semGit: 'git is not on this machine: the canary is unavailable, never passing',
824
+ divergencia: (expected, observed) => `expected ${expected}, observed ${observed}`,
825
+ canarioSemFixture: (id) => `canary ${id} exists in code but has no eval/fixtures/${id}/caso.json`,
826
+ skillSemEval: (skill) => `a skill without eval does not enter the catalog: eval/casos/${skill}.json is missing`,
827
+ evalSemSkill: 'there are cases for a skill that does not exist in the catalog',
828
+ titulo: (catalog) => `ork eval, catalog at ${catalog}`,
829
+ canarios: 'Canaries (real core behavior, against real git)',
830
+ colunasCanarios: ['CANARY', 'STATE', 'SUBJECT'],
831
+ estados: { passou: 'passed', unavailable: 'unavailable', falhou: 'failed' },
832
+ skills: 'Skills corpus (the static half: rules that must exist in the file)',
833
+ colunasSkills: ['SKILL', 'CASES', 'ASSERTIONS', 'FAILURES'], falhas: 'Failures',
834
+ resumoCanarios: (passed, total, unavailable) => `canaries: ${passed}/${total} green${unavailable > 0 ? ` (${unavailable} unavailable)` : ''}`,
835
+ resumoSkills: (skills, cases, assertions, failures) => `skills: ${skills} | cases: ${cases} | assertions: ${assertions} | failures: ${failures}`,
836
+ metade: 'behavioral half (does the agent resist the excuse?): unavailable, judged by a human or a model, never by this runner',
837
+ veredito: (ok) => `VERDICT: ${ok ? 'green' : 'red'}`,
838
+ },
839
+ memory: {
840
+ cli: {
841
+ inventario: (tenant, included, excluded) => `Tenant ${tenant} inventory: ${included} included, ${excluded} excluded.`,
842
+ fonte: (include, file, reason) => ` ${include ? 'include' : 'exclude'} ${file}: ${reason}`,
843
+ migracao: (tenant, confirmed, failures, excluded) => `Tenant ${tenant} migration: ${confirmed} confirmed, ${failures} failures, ${excluded} excluded.`,
844
+ tagsUso: 'usage: ork memory search --tags \'{"project":["orkastery"],"skill":["orkastery-decision"]}\'',
845
+ tagsInvalidas: (error) => `--tags is not valid JSON: ${error}`,
846
+ files: (reason) => `memory.query.files: ${reason}; the result does not prove absence from semantic memory`,
847
+ buscaTag: (regime) => `Deterministic search by tag (${regime} regime)`,
848
+ correcao: (value) => ` fix: ${value}`,
849
+ entradas: (n) => ` ${n} entry(ies)`,
850
+ indexUso: 'usage: ork memory index [--modelo primario|fallback|todos] [--dry-run] [--json]',
851
+ indexFalha: (regime, reason, fix) => `memory.index: ${regime} regime (${reason}); ${fix}`,
852
+ universoFalhou: (reason, detail) => `memory.index: ${reason}; ${detail}`,
853
+ universoDetalhe: 'the search universe was not read in full; nothing was embedded',
854
+ desconhecido: (sub) => `unknown subcommand: memory ${sub}`,
855
+ textoExclusivo: 'memory.search.texto-exclusivo: --texto cannot be combined with --tags, --thread, --restrito, or --janela',
856
+ textoUso: (modes, collections, limit) => `usage: ork memory search --texto "<phrase>" [--modo ${modes}] [--colecao ${collections}] [--limite 1..${limit}] [--json]`,
857
+ buscaUniversoDetalhe: 'the search universe was not read in full; nothing was searched',
858
+ syncDetalhe: 'sync was not executed; the legacy collision was not reevaluated',
859
+ },
860
+ estado: {
861
+ titulo: 'Project memory regime', pedido: (v) => ` requested in manifest ${v}`,
862
+ efetivo: (v) => ` effective regime ${v}`, tenant: (v) => ` tenant ${v}`,
863
+ variavel: (v) => ` database variable ${v || '(not declared)'}`,
864
+ dsn: (yes) => ` DSN in environment ${yes ? 'yes (value never printed)' : 'no'}`,
865
+ arquivo: (v) => ` database file ${v}`,
866
+ dsnNoArquivo: (yes) => ` DSN in file ${yes ? 'yes (value never printed)' : 'no'}`,
867
+ cli: (v) => ` OrkMind CLI ${v}`, degradacao: (v) => ` degradation: ${v}`,
868
+ correcao: (v) => ` fix: ${v}`,
869
+ continua1: ' The cycle does NOT stop because of this: in files regime the handoff remains sorted into 3 tiers,',
870
+ continua2: ' pointers remain `path#anchor`, and `ork recall` keeps resolving them.',
871
+ colecoes: (v) => ` stored collections: ${v}`,
872
+ governanca: ' governance: source=agent; decision/human requires a proven human_gate; mandatory=false and rule is never critical.',
873
+ },
874
+ embeddings: {
875
+ titulo: 'Search by meaning (embeddings, non-deterministic; tag recall does not change)',
876
+ provider: (v) => ` provider ${v}`, desligada: 'none (disabled)',
877
+ chave: (name, present) => ` key ${name} ${present ? 'present' : 'missing'} in environment (value never printed)`,
878
+ fallback: (v) => ` local fallback ${v}`, naoDeclarado: '(not declared)',
879
+ cache: (dim) => `in cache (${dim} dim)`, foraCache: 'missing from cache',
880
+ deps: (v) => `dependencies ${v}`, depsOk: 'ok', depsAusentes: 'missing', depsNaoSondadas: 'not probed',
881
+ ativo: (v, probed) => ` active path ${v}${probed ? '' : ' (bridge not probed)'}`,
882
+ universo: (n, collections) => ` search universe ${n} tenant entry(ies): ${collections}`,
883
+ fora: (v) => ` outside search ${v}`,
884
+ universoFalhou: (v) => ` search universe not read (${v}); coverage not calculated`,
885
+ indice: (model, dim, vectors, coherent, stale) => ` index ${model} / ${dim} dim: ${vectors} vector(s), ${coherent ?? '?'} coherent, ${stale ?? '?'} stale`,
886
+ cobertura: (v, entries) => ` coverage ${v} of ${entries} search-universe entry(ies)`,
887
+ aviso: (v) => ` warning ${v}`,
888
+ sondaOk: (target, ms) => `${target} answered in ${ms} ms`,
889
+ sondaFalha: (reason) => `no response (${reason})`, semCaminho: 'no active path',
890
+ sonda: (v) => ` probe ${v}`, motivo: (v) => ` reason ${v}`,
891
+ },
892
+ sync: {
893
+ titulo: (regime, thread) => `Memory synchronization (${regime} regime)${thread ? ` for thread ${thread}` : ''}`,
894
+ perfil: (profile, outside) => `Profile: ${profile}; outside profile: ${outside || '(none)'}`,
895
+ pendente: (reason) => `Publication pending: ${reason}`,
896
+ entradas: (name, total, detail) => ` ${name.padEnd(10)} ${total} entry(ies): ${detail}`,
897
+ humanos: (eligible, excluded, failures) => ` human_gate ${eligible} eligible, ${excluded} excluded, ${failures} failures`,
898
+ gravacao: (name, value) => ` ${name.padEnd(10)} ${value}`,
899
+ jaExiste: 'already exists', gravado: 'stored', naoGravado: (v) => `not stored: ${v}`,
900
+ nada: '(nothing to store)', total: (n, failures) => ` total ${n} attempt(s), ${failures} not stored`,
901
+ correcao: (v) => ` fix: ${v}`,
902
+ },
903
+ indice: {
904
+ custoNaoEstimado: 'not estimated', semModelo: '(no model)',
905
+ titulo: (target, dry, model, dim) => `Vector index (${target}${dry ? ', --dry-run' : ''}): ${model}${dim ? ` / ${dim} dim` : ''}`,
906
+ universo: (n, collections, coherent) => ` search universe ${n} entry(ies): ${collections}; coherent ${coherent}`,
907
+ fora: (v) => ` outside search ${v}`,
908
+ embedados: (n, rewritten, removed) => ` embedded ${n} (rewritten ${rewritten}); removed ${removed}`,
909
+ recusados: (n, limit) => ` outside index ${n} rejected for secret patterns, ${limit} above the limit`,
910
+ truncados: (n) => ` truncated ${n} above the local model context, embedded from the beginning`,
911
+ estimativa: (tokens, cost, calls) => ` estimate ${tokens} token(s), ${cost}; provider calls ${calls}`,
912
+ arquivo: (v) => ` file ${v}`, motivo: (m, d) => ` reason ${m}: ${d}`,
913
+ foraMedido: (injection, expired, others) => `${injection} with injection_risk and ${expired} expired (library governance), ${others} in other collections (outside ork search); none goes to embedding`,
914
+ foraNaoMedido: 'not measured in this database',
915
+ },
916
+ busca: {
917
+ titulo: (mode, source, model) => `Search by meaning (NON-deterministic; mode ${mode}, source ${source}${model ? ` ${model}` : ''})`,
918
+ motivo: (v, detail) => ` reason: ${v}${detail ? `; ${detail}` : ''}`,
919
+ detalhe: (v) => ` detail: ${v}`, similaridade: (v) => ` similarity ${v}`,
920
+ resumo: (n) => ` ${n} result(s); tag search remains available with ork memory search --tags`,
921
+ },
922
+ },
923
+ mcp: {
924
+ uso: 'usage: ork mcp serve|install --project <absolute root> --host codex|claude-code [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... only for install with forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate only for Codex install] [--dry-run only for install]',
925
+ erro: (detail) => `mcp: ${detail}`,
926
+ simulacao: 'Simulation: no writes.',
927
+ preparada: 'MCP configuration prepared.',
928
+ inicio: 'Open a new session in this project, complete the native consent requested by the client, and check discovery of the ork_* tools.',
929
+ ativacao: 'Activation and use still await verification in the client. Automatic elicitation responses must not be enabled for owner decisions.',
930
+ },
931
+ };