@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,181 @@
1
+ "use strict";
2
+ /**
3
+ * RM-026 K7, fatia 2: a familia `conhecimento` do catalogo de mensagens (o conhecimento escrito,
4
+ * `ork.conhecimento/v1`). O pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * O detalhe de cada lacuna vai ao `--json` e a resposta das tools MCP em pt-BR: o leitor e a consulta o montam por
7
+ * `textoDoCatalogo`, e so a impressao o remonta no locale (o padrao da F2b da RM-061). O pt-BR das lacunas da fatia 1
8
+ * e o de antes, byte a byte. Sai como veio: o codigo da lacuna, o id, o arquivo, a referencia, o titulo e o corpo do
9
+ * documento (dado do repositorio) e a mensagem do `lerYaml` (o modulo dono a escreve, como o validador do manifesto
10
+ * na D14 da F2a).
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CONHECIMENTO_EN = exports.CONHECIMENTO_PT_BR = void 0;
14
+ exports.CONHECIMENTO_PT_BR = {
15
+ uso: 'uso: ork conhecimento [listar [--colecao C]|mostrar <doc-id>|colecoes|verificar] [--json]',
16
+ // ork conhecimento: o texto para gente (D13). O titulo, o id, o arquivo e o corpo sao dado do repositorio.
17
+ naoLido: 'Conhecimento: a pasta não foi lida.',
18
+ listar: (dir, n, colecao) => `Conhecimento em ${dir}${colecao === null ? '' : `, coleção ${colecao}`}: ${n} documento(s).`,
19
+ documento: (id, titulo, colecoes) => ` ${id} ${titulo} (${colecoes})`,
20
+ nenhumDocumento: ' (nenhum documento)',
21
+ paraLer: 'Para ler um documento: ork conhecimento mostrar <doc-id>.',
22
+ colecoes: (dir, n) => `Coleções em ${dir}: ${n}.`,
23
+ colecao: (nome, documentos) => ` ${nome} ${documentos}`,
24
+ nenhumaColecao: ' (nenhuma coleção)',
25
+ mostrar: (id, titulo) => `${id}: ${titulo}`,
26
+ semDocumento: (id) => `${id}: nenhum documento válido com este id.`,
27
+ colecoesDoDocumento: (colecoes) => ` coleções ${colecoes}`,
28
+ arquivo: (arquivo) => ` arquivo ${arquivo}`,
29
+ versao: (sha256, bytes) => ` versão sha256 ${sha256}, ${bytes} bytes`,
30
+ brain: (id, titulo, kind, versao, fonte) => ` Brain ${id}: ${titulo} (${kind}, versão ${versao}, fonte ${fonte})`,
31
+ decisao: (ref, tipo, fonte) => ` decisão ${ref}: ${tipo} (fonte ${fonte})`,
32
+ semReferencia: ' referências nenhuma',
33
+ corpo: 'Corpo do documento:',
34
+ verificar: (dir, documentos, brain, decisoes) => `Conhecimento em ${dir}: ${documentos} documento(s) válido(s), ${brain} id(s) do Brain e ${decisoes} decisão(ões) conferido(s).`,
35
+ aprovado: 'Verificação aprovada: nenhuma lacuna.',
36
+ reprovado: (n) => `Verificação reprovada: ${n} lacuna(s).`,
37
+ lacunasTitulo: (n) => `${n} lacuna(s), o que ficou fora da resposta:`,
38
+ lacuna: (codigo, onde, detalhe) => ` ${codigo} ${onde}: ${detalhe}`,
39
+ pasta: 'a pasta',
40
+ naReferencia: (referencia) => `referência ${referencia}`,
41
+ lacunas: {
42
+ naoDeclarado: 'o orkastery.yaml não declara conhecimento.dir',
43
+ dirForma: 'conhecimento.dir precisa ser uma pasta relativa à raiz, sem "..", fora de .git e .orkastery, como ' +
44
+ 'docs/conhecimento; nada foi lido',
45
+ dirNaoAbre: 'a pasta de conhecimento.dir não existe ou não abre',
46
+ dirForaDaRaiz: 'pelo caminho real (links resolvidos), conhecimento.dir sai da raiz do projeto; o manifesto vem com o ' +
47
+ 'repositório e não escolhe caminho fora dela; nada foi lido',
48
+ dirReal: 'pelo caminho real, conhecimento.dir é a própria raiz, cai em .git ou .orkastery, ou tem caractere invisível; ' +
49
+ 'nada foi lido',
50
+ dirNaoEPasta: 'conhecimento.dir não é uma pasta',
51
+ limiteEntradas: (n) => `a pasta passa de ${n} entradas; nenhum documento foi devolvido`,
52
+ limiteNiveis: (n) => `a pasta passa de ${n} níveis; nenhum documento foi devolvido`,
53
+ limiteTotal: (mib) => `os documentos passam de ${mib} MiB no total; nenhum documento foi devolvido`,
54
+ link: 'link simbólico não é seguido; o documento é o arquivo versionado',
55
+ pastaNaoAbriu: 'a pasta não abriu para leitura; o que está nela não foi lido',
56
+ nomeInvalido: 'nome fora de UTF-8 ou com caractere invisível; não foi lido',
57
+ entradaNaoAbriu: 'a entrada não abriu para leitura; não foi lida',
58
+ naoRegular: 'não é arquivo comum; não foi lido',
59
+ naoAbriuComoArquivo: 'não abriu como arquivo comum, ou mudou durante a leitura',
60
+ grandeDemais: (kib) => `o documento passa de ${kib} KiB`,
61
+ codificacao: 'o arquivo não é UTF-8',
62
+ semFrontmatter: 'o arquivo não começa com o frontmatter entre duas linhas ---',
63
+ frontmatterGrande: (kib) => `o frontmatter passa de ${kib} KiB`,
64
+ /** A mensagem do `lerYaml`, que diz a linha do arquivo; no pt-BR ela e o detalhe inteiro. */
65
+ frontmatterYaml: (erro) => erro,
66
+ frontmatterNaoEMapa: 'o frontmatter precisa ser um mapa de chaves',
67
+ idInvalido: 'id precisa ser doc- seguido de 3 a 48 letras minúsculas, números ou hífens, começando por letra ou número',
68
+ chaveDesconhecida: (chaves, doContrato) => `chave fora do contrato: ${chaves} (o frontmatter tem só ${doContrato})`,
69
+ tituloInvalido: (n) => `titulo precisa ser texto de 1 a ${n} caracteres, sem caractere de controle`,
70
+ colecoesInvalidas: (n) => `colecoes precisa listar de 1 a ${n} nomes de 1 a 48 letras minúsculas, números ou hífens, ` +
71
+ 'sem repetir',
72
+ referenciasInvalidas: (n) => `referencias é um mapa só com brain e decisoes, cada uma uma lista de até ${n} textos`,
73
+ idRepetido: (n) => `o id aparece em ${n} arquivos; nenhum deles vale até sobrar um`,
74
+ brainForma: 'id do Brain é prod-, proj- ou init-, na regra dos ids do portfólio',
75
+ decisaoForma: 'decisão é <thread>#<linha>, com o id da thread e a linha do ledger a partir de 1',
76
+ ledgerLinkOuId: 'a pasta da thread no estado do projeto é link ou fica fora da regra de id',
77
+ ledgerNaoAbriu: (thread) => `o ledger da thread ${thread} não abriu para leitura`,
78
+ semLedger: (thread) => `a thread ${thread} não tem ledger neste projeto`,
79
+ ledgerNaoRegular: (thread, mib) => `o ledger da thread ${thread} não é arquivo comum de até ${mib} MiB`,
80
+ ledgerNaoUtf8: (thread) => `o ledger da thread ${thread} não é UTF-8`,
81
+ ledgersDemais: (mib) => `a leitura passa de ${mib} MiB de ledger lido; a decisão não foi conferida`,
82
+ linhasCompletas: (thread, n) => `o ledger da thread ${thread} tem ${n} linha(s) completa(s)`,
83
+ naoEJson: (linha, thread) => `a linha ${linha} do ledger da thread ${thread} não é um evento JSON`,
84
+ outraThread: (linha, thread) => `a linha ${linha} do ledger da thread ${thread} é de outra thread`,
85
+ /** `tipo` e o tipo do evento quando ele tem a forma de um; `null`, sem tipo conhecido. */
86
+ naoEDecisao: (linha, thread, tipo, decisoes) => `a linha ${linha} do ledger da thread ${thread} é ${tipo ?? 'sem tipo conhecido'}, não decisão (${decisoes})`,
87
+ // Fatia 2: a conferencia do id do Brain por `get` (D12) e o `mostrar` de um id sem documento (D13).
88
+ brainInexistente: 'o Company Brain não tem este id (o get respondeu unknown)',
89
+ brainRetido: 'o Company Brain tem este id, mas o retém para esta leitura (o get respondeu withheld); a referência não é citável aqui',
90
+ brainNaoRespondeu: (estado, erro) => `o Company Brain não respondeu ao get (${estado}${erro ? `, ${erro}` : ''}); a referência não foi conferida`,
91
+ brainForaDoContrato: 'o get do Company Brain respondeu fora do contrato da entidade (orkmind.company-brain-entity/v1); ' +
92
+ 'a referência não foi conferida',
93
+ brainSemConfiguracao: (codigo) => `a configuração do Company Brain não foi lida (${codigo ?? 'sem código'}); a referência não foi conferida`,
94
+ brainTeto: (n) => `a consulta passa de ${n} ids do Brain conferidos por get; a referência não foi conferida`,
95
+ brainPrazo: (s) => `a conferência do Brain passou do prazo de ${s} s da consulta; a referência não foi conferida`,
96
+ documentoInexistente: (id, semId) => `nenhum documento válido da pasta tem o id ${id}` +
97
+ (semId ? `; ${semId} arquivo(s) da pasta viraram lacuna antes de o id ser lido (ork conhecimento verificar)` : ''),
98
+ },
99
+ };
100
+ exports.CONHECIMENTO_EN = {
101
+ uso: 'usage: ork conhecimento [listar [--colecao C]|mostrar <doc-id>|colecoes|verificar] [--json]',
102
+ naoLido: 'Knowledge: the folder was not read.',
103
+ listar: (dir, n, colecao) => `Knowledge in ${dir}${colecao === null ? '' : `, collection ${colecao}`}: ${n} document(s).`,
104
+ documento: (id, titulo, colecoes) => ` ${id} ${titulo} (${colecoes})`,
105
+ nenhumDocumento: ' (no document)',
106
+ paraLer: 'To read a document: `ork conhecimento mostrar <doc-id>`.',
107
+ colecoes: (dir, n) => `Collections in ${dir}: ${n}.`,
108
+ colecao: (nome, documentos) => ` ${nome} ${documentos}`,
109
+ nenhumaColecao: ' (no collection)',
110
+ mostrar: (id, titulo) => `${id}: ${titulo}`,
111
+ semDocumento: (id) => `${id}: no valid document with this id.`,
112
+ colecoesDoDocumento: (colecoes) => ` collections ${colecoes}`,
113
+ arquivo: (arquivo) => ` file ${arquivo}`,
114
+ versao: (sha256, bytes) => ` version sha256 ${sha256}, ${bytes} bytes`,
115
+ brain: (id, titulo, kind, versao, fonte) => ` Brain ${id}: ${titulo} (${kind}, version ${versao}, source ${fonte})`,
116
+ decisao: (ref, tipo, fonte) => ` decision ${ref}: ${tipo} (source ${fonte})`,
117
+ semReferencia: ' references none',
118
+ corpo: 'Document body:',
119
+ verificar: (dir, documentos, brain, decisoes) => `Knowledge in ${dir}: ${documentos} valid document(s), ${brain} Brain id(s) and ${decisoes} decision(s) checked.`,
120
+ aprovado: 'Check passed: no gap.',
121
+ reprovado: (n) => `Check failed: ${n} gap(s).`,
122
+ lacunasTitulo: (n) => `${n} gap(s), what was left out of the answer:`,
123
+ lacuna: (codigo, onde, detalhe) => ` ${codigo} ${onde}: ${detalhe}`,
124
+ pasta: 'the folder',
125
+ naReferencia: (referencia) => `reference ${referencia}`,
126
+ lacunas: {
127
+ naoDeclarado: 'the orkastery.yaml does not declare conhecimento.dir',
128
+ dirForma: 'conhecimento.dir must be a folder relative to the root, without "..", outside .git and .orkastery, like ' +
129
+ 'docs/conhecimento; nothing was read',
130
+ dirNaoAbre: 'the conhecimento.dir folder does not exist or does not open',
131
+ dirForaDaRaiz: 'by the real path (links resolved), conhecimento.dir leaves the project root; the manifest comes with the ' +
132
+ 'repository and does not choose a path outside it; nothing was read',
133
+ dirReal: 'by the real path, conhecimento.dir is the root itself, falls in .git or .orkastery, or has an invisible character; ' +
134
+ 'nothing was read',
135
+ dirNaoEPasta: 'conhecimento.dir is not a folder',
136
+ limiteEntradas: (n) => `the folder has more than ${n} entries; no document was returned`,
137
+ limiteNiveis: (n) => `the folder has more than ${n} levels; no document was returned`,
138
+ limiteTotal: (mib) => `the documents add up to more than ${mib} MiB; no document was returned`,
139
+ link: 'symbolic links are not followed; the document is the versioned file',
140
+ pastaNaoAbriu: 'the folder did not open for reading; what is in it was not read',
141
+ nomeInvalido: 'name outside UTF-8 or with an invisible character; not read',
142
+ entradaNaoAbriu: 'the entry did not open for reading; not read',
143
+ naoRegular: 'not a regular file; not read',
144
+ naoAbriuComoArquivo: 'did not open as a regular file, or changed during the read',
145
+ grandeDemais: (kib) => `the document is larger than ${kib} KiB`,
146
+ codificacao: 'the file is not UTF-8',
147
+ semFrontmatter: 'the file does not start with the frontmatter between two --- lines',
148
+ frontmatterGrande: (kib) => `the frontmatter is larger than ${kib} KiB`,
149
+ frontmatterYaml: (erro) => `invalid YAML in the frontmatter (${erro})`,
150
+ frontmatterNaoEMapa: 'the frontmatter must be a map of keys',
151
+ idInvalido: 'id must be doc- followed by 3 to 48 lowercase letters, digits or hyphens, starting with a letter or digit',
152
+ chaveDesconhecida: (chaves, doContrato) => `key outside the contract: ${chaves} (the frontmatter only has ${doContrato})`,
153
+ tituloInvalido: (n) => `titulo must be text of 1 to ${n} characters, without a control character`,
154
+ colecoesInvalidas: (n) => `colecoes must list 1 to ${n} names of 1 to 48 lowercase letters, digits or hyphens, ` +
155
+ 'without repeating',
156
+ referenciasInvalidas: (n) => `referencias is a map with only brain and decisoes, each a list of up to ${n} texts`,
157
+ idRepetido: (n) => `the id appears in ${n} files; none of them counts until only one is left`,
158
+ brainForma: 'a Brain id is prod-, proj- or init-, by the rule of the portfolio ids',
159
+ decisaoForma: 'a decision is <thread>#<line>, with the thread id and the ledger line counted from 1',
160
+ ledgerLinkOuId: 'the thread folder in the project state is a link or breaks the id rule',
161
+ ledgerNaoAbriu: (thread) => `the ledger of thread ${thread} did not open for reading`,
162
+ semLedger: (thread) => `thread ${thread} has no ledger in this project`,
163
+ ledgerNaoRegular: (thread, mib) => `the ledger of thread ${thread} is not a regular file of up to ${mib} MiB`,
164
+ ledgerNaoUtf8: (thread) => `the ledger of thread ${thread} is not UTF-8`,
165
+ ledgersDemais: (mib) => `the read goes past ${mib} MiB of ledger read; the decision was not checked`,
166
+ linhasCompletas: (thread, n) => `the ledger of thread ${thread} has ${n} complete line(s)`,
167
+ naoEJson: (linha, thread) => `line ${linha} of the ledger of thread ${thread} is not a JSON event`,
168
+ outraThread: (linha, thread) => `line ${linha} of the ledger of thread ${thread} belongs to another thread`,
169
+ naoEDecisao: (linha, thread, tipo, decisoes) => `line ${linha} of the ledger of thread ${thread} is ${tipo ?? 'of no known type'}, not a decision (${decisoes})`,
170
+ brainInexistente: 'the Company Brain does not have this id (get answered unknown)',
171
+ brainRetido: 'the Company Brain has this id but withholds it from this read (get answered withheld); the reference is not citable here',
172
+ brainNaoRespondeu: (estado, erro) => `the Company Brain did not answer the get (${estado}${erro ? `, ${erro}` : ''}); the reference was not checked`,
173
+ brainForaDoContrato: 'the Company Brain get answered outside the entity contract (orkmind.company-brain-entity/v1); ' +
174
+ 'the reference was not checked',
175
+ brainSemConfiguracao: (codigo) => `the Company Brain configuration was not read (${codigo ?? 'no code'}); the reference was not checked`,
176
+ brainTeto: (n) => `the query goes past ${n} Brain ids checked by get; the reference was not checked`,
177
+ brainPrazo: (s) => `the Brain check went past the query deadline of ${s} s; the reference was not checked`,
178
+ documentoInexistente: (id, semId) => `no valid document in the folder has the id ${id}` +
179
+ (semId ? `; ${semId} file(s) in the folder became gaps before the id was read (\`ork conhecimento verificar\`)` : ''),
180
+ },
181
+ };
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F3b: a familia `decisao` do catalogo de mensagens (`ork decisao placar` e o uso do comando). O pt-BR e
4
+ * a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * F3c: as recusas de `ork decisao registrar` (a validacao do pedido HITL v2 em `hitl-contract.ts`, o criterio em
7
+ * `hitl-gates.ts`, o rastro em `ledger.ts`), no CLI e no `ork_decision_record` do MCP, tambem vem daqui; o resultado
8
+ * segue JSON, e os codigos e o contrato nao mudam com a lingua. A fase da linha do placar e dado e sai igual.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DECISAO_EN = exports.DECISAO_PT_BR = void 0;
12
+ exports.DECISAO_PT_BR = {
13
+ uso: 'uso: ork decisao registrar|placar <thread-id>',
14
+ usoRegistrar: 'uso: ork decisao registrar <thread-id> --decidido D --porque P ...',
15
+ usoPlacar: 'uso: ork decisao placar <thread-id> [--json]',
16
+ exigeFlag: (nome) => `decisao registrar exige --${nome}`,
17
+ criterioUso: 'decisao registrar: --criterio manifesto:CHAVE, ledger:REF ou medicao:COMANDO',
18
+ linhaFalta: (campo) => `falta ${campo}`,
19
+ linhaQuebrada: (campo) => `${campo} tem quebra de linha; cada campo é uma linha só`,
20
+ linhaControle: (campo) => `${campo} tem caractere de controle`,
21
+ linhaLonga: (campo, tamanho, teto) => `${campo} tem ${tamanho} caracteres; o teto é ${teto}`,
22
+ contratoCampoDeGate: (campo) => `pedido HITL v2: decisão informada não pode trazer ${campo}`,
23
+ contratoCamposObrigatorios: (problema) => `pedido HITL v2: decisão informada exige o que foi decidido, o porquê e como mudar (${problema})`,
24
+ contratoCampoInvalido: (problema) => `pedido HITL v2: decisão informada: ${problema}`,
25
+ contratoCustoObrigatorio: 'pedido HITL v2: custo de reverter exige agora e depois, os dois presentes',
26
+ contratoCustoInvalido: (problema) => `pedido HITL v2: custo de reverter: ${problema}`,
27
+ contratoCriterioObrigatorio: 'pedido HITL v2: decisão informada exige critério citado e resolvível',
28
+ contratoCriterioInvalido: (problema) => `pedido HITL v2: critério: ${problema}`,
29
+ contratoIrreversivel: 'pedido HITL v2: ato irreversível nunca é decisão informada',
30
+ contratoComumInvalido: 'pedido HITL v2: identificação, modo, instante ou profundidade inválidos',
31
+ contratoAlternativas: 'pedido HITL v2: de 2 a 5 alternativas, rotuladas de a a e',
32
+ contratoAlternativaSemTexto: 'pedido HITL v2: alternativa sem texto',
33
+ contratoAlternativaSemAcao: 'pedido HITL v2: alternativa sem ação explícita',
34
+ contratoAlternativaSemConsequencia: 'pedido HITL v2: alternativa sem consequência em uma linha',
35
+ contratoPorqueSoRecomendada: 'pedido HITL v2: só a alternativa recomendada diz o porquê',
36
+ contratoRecomendadaBoolean: 'pedido HITL v2: recomendada só aceita true ou ausência',
37
+ contratoRecomendadaSemPorque: 'pedido HITL v2: a alternativa recomendada precisa dizer o porquê em uma linha',
38
+ contratoUmaRecomendada: 'pedido HITL v2: exatamente uma alternativa é recomendada',
39
+ contratoPerguntaFrase: 'pedido HITL v2: a pergunta é uma frase, sem quebra de linha',
40
+ contratoMotivoInvalido: 'pedido HITL v2: motivo inválido',
41
+ contratoCorpoLinhas: 'pedido HITL v2: o corpo é lista de linhas, nunca prosa corrida',
42
+ contratoTipoRespostaInvalido: 'pedido HITL v2: tipo de resposta inválido',
43
+ contratoCodigoInvalido: 'pedido HITL v2: código curto inválido',
44
+ contratoAlvoInvalido: 'pedido HITL v2: alvo inválido',
45
+ contratoRespostaInvalida: 'pedido HITL v2: resposta aceita inválida',
46
+ contratoPrazoInvalido: 'pedido HITL v2: prazo ou ação de expiração inválidos',
47
+ contratoDependenciaInvalida: 'pedido HITL v2: dependência técnica exige o comando exato e o porquê, uma linha cada',
48
+ contratoIrreversivelAusente: 'pedido HITL v2: irreversível precisa ser declarado',
49
+ contratoAtoIrreversivelInvalido: 'pedido HITL v2: ato irreversível precisa nomear um da lista congelada',
50
+ contratoIrreversivelExpira: 'pedido HITL v2: ato irreversível nunca avança por expiração',
51
+ contratoAtoSoIrreversivel: 'pedido HITL v2: só pedido irreversível nomeia ato',
52
+ contratoDesconhecido: 'pedido HITL v2: contrato inválido',
53
+ contratoClasseInvalida: 'pedido HITL v2: classe precisa ser decidido ou pergunta',
54
+ selecaoVersao: 'o pedido de condução do ork sai em ork.hitl/v2, com alternativas declaradas',
55
+ selecaoFaixa: (minimo, maximo, atual) => `de ${minimo} a ${maximo} alternativas, este traz ${atual}`,
56
+ selecaoRecomendada: (atual) => `exatamente uma alternativa com o selo Recomendação, este traz ${atual}`,
57
+ selecaoTextoLivre: 'resposta em texto só com dependência técnica tipada: o comando exato que o dono roda no terminal e o porquê',
58
+ threadFechada: 'decisão informada: thread fechada não decide mais nada',
59
+ criterioNaoResolve: (detalhe) => `decisão informada: critério não resolve (${detalhe})`,
60
+ criterioMedicao: 'comando citado; quem executa e reprova é o CHECK',
61
+ criterioManifestoIlegivel: 'manifesto do projeto não pôde ser lido',
62
+ criterioManifestoSemChave: (referencia) => `o manifesto não tem a chave ${referencia}`,
63
+ criterioManifestoVazio: (referencia) => `a chave ${referencia} existe mas está vazia`,
64
+ criterioManifestoLido: (referencia) => `chave ${referencia} lida do manifesto`,
65
+ criterioLedgerIlegivel: (thread) => `a thread ${thread} não tem ledger legível`,
66
+ criterioEvento: (evento, thread) => `evento ${evento} de ${thread}`,
67
+ criterioEventoAusente: (evento, thread) => typeof evento === 'number' ? `${thread} não tem evento ${evento}` : `nenhum evento de ${thread} tem esse identificador`,
68
+ faseMudou: 'decisão informada: a fase mudou enquanto ela era registrada',
69
+ revertidaNaoExiste: 'decisão informada: a decisão revertida não existe nesta thread',
70
+ autorMcp: 'mcp.decision.author: quemDecidiu e a sessao que decidiu, nunca o dono',
71
+ rastroObrigatorio: (campo) => `decisão autônoma exige ${campo}: quem decidiu, com que evidência e por quê`,
72
+ colunasDoPlacar: ['FASE', 'DECIDIDAS', 'INFORMADAS', 'PERGUNTAS', 'REVERTIDAS', 'SEM RASTRO', 'LIMIAR'],
73
+ acimaDoLimiar: (limiar) => `acima de ${limiar}: revisar`,
74
+ dentroDoLimiar: 'ok',
75
+ taxaDeReversao: (taxa) => `\ntaxa de reversão das decisões informadas: ${taxa === null ? 'sem decisão informada ainda' : `${Math.round(taxa * 100)}%`}`,
76
+ curto: {
77
+ selo: 'Recomendação',
78
+ atos: {
79
+ dinheiro: 'gasta dinheiro', 'publicacao-externa': 'publica fora do projeto',
80
+ 'apagar-dado': 'apaga dado', 'push-base-protegida': 'faz push na base protegida',
81
+ },
82
+ soPergunta: 'pedido curto: só uma pergunta ork.hitl/v2 tem alternativas declaradas',
83
+ semRespostaRecomendada: (ate) => `Sem resposta${ate}, sigo com a recomendada.`,
84
+ semRespostaEscala: (ate) => `Sem resposta${ate}, o pedido é escalado.`,
85
+ ate: (valor) => ` até ${valor}`,
86
+ semRespostaSessao: 'Sem resposta, a sessão continua parada.',
87
+ semRespostaGate: 'Sem resposta, nada avança.',
88
+ alternativas: 'pedido curto: de 2 a 5 alternativas',
89
+ umaRecomendada: 'pedido curto: exatamente uma alternativa é recomendada',
90
+ sessaoParada: (id) => `A sessão ${id} está parada esperando você`,
91
+ faseParada: (fase) => `${fase ? `A fase ${fase}` : 'A thread'} está parada esperando você`,
92
+ desde: (valor) => ` desde ${valor}`,
93
+ semThread: 'sem thread',
94
+ semVolta: (ato) => `Sem volta depois de feito: ${ato}.`,
95
+ respostaTexto: 'Responda escrevendo o texto; ele é enviado como está.',
96
+ respostaTerminal: (recomendada, comando) => `feito o comando, ${recomendada}) é \`${comando}\`.`,
97
+ respostaDialogo: 'Responda selecionando a opção no diálogo; digitar a letra também vale.',
98
+ respostaTelegram: (codigo, recomendada) => `↩️ Responda: ${codigo} ${recomendada} (ou outra letra). Evidências: ${codigo} detalhes.`,
99
+ respostaHost: (codigo, recomendada) => `Responda pelo Telegram: ${codigo} ${recomendada} (ou outra letra); aqui, pelo diálogo do host. Evidências: ${codigo} detalhes.`,
100
+ // RM-057 (resposta curta): as letras reais da pergunta, e o detalhe a um pedido de distância.
101
+ listaDeLetras: (letras) => letras.length < 2 ? letras.join('') : `${letras.slice(0, -1).join(', ')} ou ${letras.at(-1)}`,
102
+ respostaLetras: (letras, codigo) => `Responda ${letras}. Detalhes: ${codigo} detalhes.`,
103
+ // GO-FIX 2 (D22 da ork-rm057respost): o terminal não grava resposta; o dono responde no Telegram ou na janela do host.
104
+ respostaLetrasHost: (letras, codigo) => `${letras} no Telegram, ou pela janela de confirmação do host. Detalhes: ${codigo} detalhes.`,
105
+ contratoInvalido: 'pedido curto: contrato inválido',
106
+ pergunta: 'Pergunta', situacao: 'Situação', porque: 'porquê', responder: 'Responder',
107
+ acimaDoTeto: 'pedido curto: acima do teto de linhas',
108
+ },
109
+ };
110
+ exports.DECISAO_EN = {
111
+ uso: 'usage: ork decisao registrar|placar <thread-id>',
112
+ usoRegistrar: 'usage: ork decisao registrar <thread-id> --decidido D --porque P ...',
113
+ usoPlacar: 'usage: ork decisao placar <thread-id> [--json]',
114
+ exigeFlag: (nome) => `decisao registrar requires --${nome}`,
115
+ criterioUso: 'decisao registrar: --criterio manifesto:KEY, ledger:REF or medicao:COMMAND',
116
+ linhaFalta: (campo) => `missing ${campo}`,
117
+ linhaQuebrada: (campo) => `${campo} has a line break; each field must be one line`,
118
+ linhaControle: (campo) => `${campo} has a control character`,
119
+ linhaLonga: (campo, tamanho, teto) => `${campo} has ${tamanho} characters; the limit is ${teto}`,
120
+ contratoCampoDeGate: (campo) => `HITL v2 request: an informed decision cannot include ${campo}`,
121
+ contratoCamposObrigatorios: (problema) => `HITL v2 request: informed decision needs what was decided, why and how to change it (${problema})`,
122
+ contratoCampoInvalido: (problema) => `HITL v2 request: informed decision: ${problema}`,
123
+ contratoCustoObrigatorio: 'HITL v2 request: reversal cost requires both now and later',
124
+ contratoCustoInvalido: (problema) => `HITL v2 request: reversal cost: ${problema}`,
125
+ contratoCriterioObrigatorio: 'HITL v2 request: informed decision criterion must be cited and resolvable',
126
+ contratoCriterioInvalido: (problema) => `HITL v2 request: criterion: ${problema}`,
127
+ contratoIrreversivel: 'HITL v2 request: an irreversible act is never an informed decision',
128
+ contratoComumInvalido: 'HITL v2 request: invalid identification, mode, timestamp, or depth',
129
+ contratoAlternativas: 'HITL v2 request: expected 2 to 5 choices labeled a through e',
130
+ contratoAlternativaSemTexto: 'HITL v2 request: choice has no text',
131
+ contratoAlternativaSemAcao: 'HITL v2 request: choice has no explicit action',
132
+ contratoAlternativaSemConsequencia: 'HITL v2 request: choice has no one-line consequence',
133
+ contratoPorqueSoRecomendada: 'HITL v2 request: only the recommended choice states why',
134
+ contratoRecomendadaBoolean: 'HITL v2 request: recomendada only accepts true or absence',
135
+ contratoRecomendadaSemPorque: 'HITL v2 request: the recommended choice must state why in one line',
136
+ contratoUmaRecomendada: 'HITL v2 request: exactly one choice must be recommended',
137
+ contratoPerguntaFrase: 'HITL v2 request: the question must be one sentence without a line break',
138
+ contratoMotivoInvalido: 'HITL v2 request: invalid reason',
139
+ contratoCorpoLinhas: 'HITL v2 request: the body must be a list of lines, never running prose',
140
+ contratoTipoRespostaInvalido: 'HITL v2 request: invalid response type',
141
+ contratoCodigoInvalido: 'HITL v2 request: invalid short code',
142
+ contratoAlvoInvalido: 'HITL v2 request: invalid target',
143
+ contratoRespostaInvalida: 'HITL v2 request: invalid accepted response',
144
+ contratoPrazoInvalido: 'HITL v2 request: invalid deadline or expiration action',
145
+ contratoDependenciaInvalida: 'HITL v2 request: a technical dependency requires the exact command and why, one line each',
146
+ contratoIrreversivelAusente: 'HITL v2 request: irreversibility must be declared',
147
+ contratoAtoIrreversivelInvalido: 'HITL v2 request: an irreversible act must name one from the frozen list',
148
+ contratoIrreversivelExpira: 'HITL v2 request: an irreversible act never advances on expiration',
149
+ contratoAtoSoIrreversivel: 'HITL v2 request: only an irreversible request names an act',
150
+ contratoDesconhecido: 'HITL v2 request: invalid contract',
151
+ contratoClasseInvalida: 'HITL v2 request: class must be decidido or pergunta',
152
+ selecaoVersao: 'an Orkastery conduction request uses ork.hitl/v2 with declared choices',
153
+ selecaoFaixa: (minimo, maximo, atual) => `expected ${minimo} to ${maximo} choices; this request has ${atual}`,
154
+ selecaoRecomendada: (atual) => `expected exactly one choice with the Recommendation badge; this request has ${atual}`,
155
+ selecaoTextoLivre: 'free-form text requires a typed technical dependency: the exact command the owner runs in the terminal and why',
156
+ threadFechada: 'informed decision: a closed thread cannot decide anything else',
157
+ criterioNaoResolve: (detalhe) => `informed decision: the criterion does not resolve (${detalhe})`,
158
+ criterioMedicao: 'command cited; CHECK runs it and fails it when needed',
159
+ criterioManifestoIlegivel: 'the project manifest could not be read',
160
+ criterioManifestoSemChave: (referencia) => `the manifest has no ${referencia} key`,
161
+ criterioManifestoVazio: (referencia) => `the ${referencia} key exists but is empty`,
162
+ criterioManifestoLido: (referencia) => `${referencia} read from the manifest`,
163
+ criterioLedgerIlegivel: (thread) => `thread ${thread} has no readable ledger`,
164
+ criterioEvento: (evento, thread) => `event ${evento} from ${thread}`,
165
+ criterioEventoAusente: (evento, thread) => typeof evento === 'number' ? `${thread} has no event ${evento}` : `no event from ${thread} has that identifier`,
166
+ faseMudou: 'informed decision: the phase changed while it was being recorded',
167
+ revertidaNaoExiste: 'informed decision: the reversed decision does not exist in this thread',
168
+ autorMcp: 'mcp.decision.author: quemDecidiu is the session that decided, never the owner',
169
+ rastroObrigatorio: (campo) => `an autonomous decision requires ${campo}: who decided, with what evidence and why`,
170
+ colunasDoPlacar: ['PHASE', 'DECIDED', 'INFORMED', 'QUESTIONS', 'REVERTED', 'NO TRAIL', 'THRESHOLD'],
171
+ acimaDoLimiar: (limiar) => `above ${limiar}: review`,
172
+ dentroDoLimiar: 'ok',
173
+ taxaDeReversao: (taxa) => `\nreversal rate of informed decisions: ${taxa === null ? 'no informed decision yet' : `${Math.round(taxa * 100)}%`}`,
174
+ curto: {
175
+ selo: 'Recommendation',
176
+ atos: {
177
+ dinheiro: 'spends money', 'publicacao-externa': 'publishes outside the project',
178
+ 'apagar-dado': 'deletes data', 'push-base-protegida': 'pushes to the protected base',
179
+ },
180
+ soPergunta: 'short request: only an ork.hitl/v2 question has declared choices',
181
+ semRespostaRecomendada: (until) => `With no answer${until}, I will follow the recommendation.`,
182
+ semRespostaEscala: (until) => `With no answer${until}, the request is escalated.`,
183
+ ate: (value) => ` until ${value}`,
184
+ semRespostaSessao: 'With no answer, the session remains stopped.',
185
+ semRespostaGate: 'With no answer, nothing advances.',
186
+ alternativas: 'short request: expected 2 to 5 choices',
187
+ umaRecomendada: 'short request: exactly one choice must be recommended',
188
+ sessaoParada: (id) => `Session ${id} is stopped waiting for you`,
189
+ faseParada: (phase) => `${phase ? `Phase ${phase}` : 'The thread'} is stopped waiting for you`,
190
+ desde: (value) => ` since ${value}`,
191
+ semThread: 'no thread',
192
+ semVolta: (act) => `No undo after completion: ${act}.`,
193
+ respostaTexto: 'Write your answer; it is sent as entered.',
194
+ respostaTerminal: (recommended, command) => `after running the command, ${recommended}) is \`${command}\`.`,
195
+ respostaDialogo: 'Select the option in the dialog; typing the letter also works.',
196
+ respostaTelegram: (code, recommended) => `↩️ Reply: ${code} ${recommended} (or another letter). Evidence: ${code} details.`,
197
+ respostaHost: (code, recommended) => `Reply on Telegram: ${code} ${recommended} (or another letter); here, use the host dialog. Evidence: ${code} details.`,
198
+ listaDeLetras: (letters) => letters.length < 2 ? letters.join('') : `${letters.slice(0, -1).join(', ')} or ${letters.at(-1)}`,
199
+ respostaLetras: (letters, code) => `Reply ${letters}. Details: ${code} detalhes.`,
200
+ respostaLetrasHost: (letters, code) => `${letters} on Telegram, or through the host's confirmation window. Details: ${code} detalhes.`,
201
+ contratoInvalido: 'short request: invalid contract',
202
+ pergunta: 'Question', situacao: 'Situation', porque: 'why', responder: 'Answer',
203
+ acimaDoTeto: 'short request: above the line limit',
204
+ },
205
+ };
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F3b: a familia `docs` do catalogo de mensagens (`ork docs verificar|sincronizar` e o uso), o resumo da
4
+ * verificacao, os achados e a sincronizacao. O pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * O que o `ork docs verificar` le nas paginas (chaves e valores do frontmatter, nomes das secoes, a linha
7
+ * `> **Em uma frase:**`, marcadores) segue em pt-BR em qualquer lingua: so a mensagem muda. A mensagem e a correcao de
8
+ * cada achado vao ao `--json` em pt-BR e so a impressao as remonta (G4); a regra (`docs.id.formato`) sai igual. O
9
+ * travessao longo das frases pt-BR de antes fica como escape: nenhum arquivo do catalogo o traz literal.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DOCS_EN = exports.DOCS_PT_BR = void 0;
13
+ const TRAVESSAO = '\u2014';
14
+ const MUDANCAS_EN = { 'tabelas de estado': 'state tables', desatualizadas: 'outdated', regeradas: 'regenerated' };
15
+ exports.DOCS_PT_BR = {
16
+ // O resumo e a sincronizacao
17
+ resumo: (paginas, features, itens, contexto) => `Documentação: ${paginas} páginas ${TRAVESSAO} ${features} features, ${itens} itens de roadmap, ${contexto} de contexto`,
18
+ semErro: (avisos) => `OK: nenhum erro de paridade${avisos ? ` · ${avisos} aviso(s) de leitura` : ''}`,
19
+ reprovado: (erros, avisos) => `REPROVADO: ${erros} erro(s)${avisos ? ` · ${avisos} aviso(s)` : ''}`,
20
+ tituloErros: 'Erros',
21
+ tituloAvisos: 'Avisos',
22
+ sincronizado: 'Sincronizado: a documentação já bate com o ledger e o git.',
23
+ aAtualizar: (escreveu, itens, indices) => `${escreveu ? 'Atualizado' : 'A atualizar'}: ${itens} item(ns) de roadmap, ${indices} índice(s).`,
24
+ /** Uma mudanca da sincronizacao; o campo e os valores sao dado do `--json` e so a impressao os traduz. */
25
+ linhaDaMudanca: (id, campo, de, para, fonte) => ` ${id.padEnd(7)} ${campo}: ${de || TRAVESSAO} \u2192 ${para} (${fonte})`,
26
+ indice: (arquivo) => ` índice ${arquivo}`,
27
+ nadaGravado: 'Nada foi gravado. Para gravar: ork docs sincronizar --escrever',
28
+ escopo: (escopo) => `Escopo: ${escopo}.`,
29
+ escopoTodos: 'todo item do roadmap',
30
+ escopoSo: (itens) => `so ${itens} (--so)`,
31
+ escopoDaThread: (itens, thread) => `so ${itens}, o item da thread ${thread} desta worktree (--todos para todo item)`,
32
+ usoSoSemItem: 'uso: ork docs sincronizar --so RM-NNN[,RM-MMM] (faltou o item depois de --so)',
33
+ usoSoInvalido: (recebido) => `uso: ork docs sincronizar --so RM-NNN[,RM-MMM] (recebido: ${recebido})`,
34
+ uso: 'uso: ork docs verificar [--json] [--pr] | sincronizar [--escrever] [--so RM-NNN] [--todos] | init',
35
+ // Os achados
36
+ semFrontmatter: 'página sem frontmatter YAML',
37
+ semFrontmatterCorrecao: 'comece o arquivo com as chaves do modelo entre duas linhas ---',
38
+ frontmatterInvalido: (erro) => `frontmatter inválido: ${erro}`,
39
+ frontmatterNaoMapa: 'o frontmatter precisa ser um mapa de chaves',
40
+ tipoDesconhecido: (tipo) => `tipo "${tipo}" desconhecido`,
41
+ useUmDe: (valores) => `use um de: ${valores}`,
42
+ useUmaDe: (valores) => `use uma de: ${valores}`,
43
+ idForaDoPadrao: (id, tipo) => `ID "${id}" fora do padrão de ${tipo}`,
44
+ formatoEsperado: (formato) => `formato esperado: ${formato}`,
45
+ arquivoSemId: 'o nome do arquivo não começa pelo ID',
46
+ renomeie: (id) => `renomeie para ${id}-<assunto>.md`,
47
+ pastaErrada: (tipo, pasta) => `${tipo} mora em ${pasta}`,
48
+ idRepetido: (arquivo) => `ID repetido: também em ${arquivo}`,
49
+ idRepetidoCorrecao: 'IDs são estáveis e únicos; renumere o novo, nunca o antigo',
50
+ baseAusente: (branch) => `branch base "${branch}" não encontrada: a paridade com o git ficou de fora`,
51
+ baseAusenteCorrecao: 'rode com o histórico do git disponível (fetch-depth: 0 no CI)',
52
+ faltaChave: (chave) => `falta a chave "${chave}"`,
53
+ faltaChaveCorrecao: `copie a chave do modelo; lacuna é "A definir ${TRAVESSAO} responsável, prazo"`,
54
+ estadoForaDoPadrao: (estado) => `estado "${estado}" fora do padrão`,
55
+ categoriaForaDoPadrao: (categoria) => `categoria "${categoria}" fora do padrão`,
56
+ estadoNaoMapa: 'estado do roadmap é um mapa de dimensões',
57
+ dimensoes: (lista) => `dimensões: ${lista}`,
58
+ faltaDimensao: (dim) => `falta a dimensão estado.${dim}`,
59
+ faltaDimensaoCorrecao: 'o padrão atualiza cada dimensão separadamente',
60
+ dimensaoForaDoPadrao: (dim, valor) => `estado.${dim} "${valor}" fora do padrão`,
61
+ dimensaoDesconhecida: (dim) => `dimensão desconhecida estado.${dim}`,
62
+ dataSemFuso: (chave, valor) => `${chave} "${valor}" não é ISO 8601 com fuso`,
63
+ dataExemplo: 'exemplo: 2026-09-24T20:00:00-03:00',
64
+ valorDoModelo: (onde, valor) => `valor do modelo não preenchido em ${onde}: ${valor}`,
65
+ faltaTabela: (nome) => `falta ${nome} gerada do frontmatter`,
66
+ faltaTabelaCorrecao: 'copie os marcadores do modelo e rode ork docs sincronizar --escrever',
67
+ tabelaDiverge: (nome) => `${nome} diverge do frontmatter`,
68
+ tabelaDivergeCorrecao: 'o estado se edita no frontmatter; rode ork docs sincronizar --escrever para regerar a tabela',
69
+ nomeDaRelance: 'a linha de relance',
70
+ nomeDoEstado: 'a tabela "Estado com evidências"',
71
+ paiDeOutroNivel: (pai, tipo) => `pai "${pai}" não é do nível acima de ${tipo}`,
72
+ paiNaoExiste: (pai) => `pai ${pai} não existe`,
73
+ paiNaoExisteCorrecao: 'crie a página do pai ou corrija o ID',
74
+ precisaDePai: (tipo) => `${tipo} precisa de pai`,
75
+ citaInexistente: (chave, alvo, tipo) => `${chave} cita ${alvo}, que não existe como ${tipo}`,
76
+ naoCitaDeVolta: (alvo, id) => `${alvo} não cita ${id} de volta`,
77
+ naoCitaDeVoltaCorrecao: (id, chave, alvo) => `acrescente ${id} em ${chave} de ${alvo}`,
78
+ linkQuebrado: (alvo) => `link quebrado: ${alvo}`,
79
+ tituloSemId: 'o título (#) não começa pelo ID',
80
+ tituloSemIdCorrecao: (id) => `# ${id} ${TRAVESSAO} <nome>: humano e agente acham a página pelo mesmo nome`,
81
+ faltaFrase: 'falta a linha "> **Em uma frase:**" logo abaixo do título',
82
+ faltaFraseCorrecao: 'escreva o que a página responde, antes de qualquer detalhe',
83
+ fraseVazia: 'a frase de abertura está vazia',
84
+ fraseLonga: (n, limite) => `a frase de abertura tem ${n} caracteres (limite ${limite})`,
85
+ fraseLongaCorrecao: 'corte para uma ideia só; o resto vai em tópicos',
86
+ faltaSecao: (secao) => `falta a seção "## ${secao}"`,
87
+ faltaSecaoCorrecao: `se não se aplica, escreva dentro dela: Não aplicável ${TRAVESSAO} motivo`,
88
+ campoDoModelo: (campo) => `campo do modelo não preenchido: [${campo}]`,
89
+ campoDoModeloCorrecao: `preencha, ou escreva "A definir ${TRAVESSAO} responsável, prazo" / "Não aplicável ${TRAVESSAO} motivo"`,
90
+ paragrafoLongo: (n) => `parágrafo com ${n} caracteres`,
91
+ paragrafoLongoCorrecao: 'quebre em tópicos: uma ideia por linha',
92
+ fontesNaoMapa: 'fontes é um mapa (codigo, testes, simbolos, contratos, comandos)',
93
+ caminhoFora: (caminho) => `${caminho}: caminho fora do repositório`,
94
+ caminhoForaCorrecao: 'use caminho relativo à raiz',
95
+ caminhoNaoExiste: (caminho) => `${caminho} não existe no repositório`,
96
+ caminhoNaoExisteCorrecao: 'a doc descreve o código que existe: corrija o caminho ou a página',
97
+ simboloForaDoFormato: (simbolo) => `símbolo "${simbolo}" fora do formato arquivo#nome`,
98
+ arquivoDoSimbolo: (arquivo, simbolo) => `${arquivo} não existe (símbolo ${simbolo})`,
99
+ simboloAusente: (simbolo, arquivo) => `${simbolo} não aparece em ${arquivo}`,
100
+ simboloAusenteCorrecao: 'o código mudou de nome ou a página ficou para trás',
101
+ contratoAusente: (contrato) => `o contrato ${contrato} não aparece nos arquivos de fontes.codigo`,
102
+ comandoAusente: (comando) => `o CLI não declara "${comando}"`,
103
+ comandoAusenteCorrecao: 'confira `ork --help`: a doc descreve o CLI que existe',
104
+ concluidoSemMerge: 'ciclo Concluído com código que não está Mesclado',
105
+ concluidoSemTestes: 'ciclo Concluído com testes que não estão Aprovados',
106
+ producaoSemMerge: 'deploy em Produção com código que não está Mesclado',
107
+ bloqueadoSemMapa: 'Bloqueado exige o mapa "bloqueio"',
108
+ bloqueadoSemMapaCorrecao: 'bloqueio: motivo, dependencia, responsavel, proxima_revisao',
109
+ mescladoSemCommit: 'código Mesclado sem o commit do merge',
110
+ mescladoSemCommitCorrecao: 'preencha evidencias.codigo.commit (ork docs sincronizar faz isso a partir do ledger e do git)',
111
+ commitInexistente: (commit) => `o commit ${commit} não existe neste repositório`,
112
+ commitForaDaBase: (commit, base) => `o commit ${commit} não está na ${base}: o merge não aconteceu`,
113
+ commitForaDaBaseCorrecao: 'volte o estado.codigo para "PR aberto" ou "Branch criada" até o merge',
114
+ mergeDaThread: (thread, base, merge, codigo, pr) => `a thread ${thread} entrou na ${base} pelo merge ${merge} (ship(${thread})), e o estado.codigo diz "${codigo || 'vazio'}"` +
115
+ (pr ? ' (no PR, aviso: o push da main reprova)' : ''),
116
+ mergeDaThreadCorrecao: (base, id) => `abra um PR de docs sobre a ${base} atualizada com ork docs sincronizar --escrever --so ${id} (o item e os índices); ` +
117
+ 'se o item tem outra fatia em curso, aponte sdlc.thread para a thread dela',
118
+ indiceNaoGerado: 'o índice ainda não foi gerado',
119
+ indiceNaoGeradoCorrecao: 'rode ork docs sincronizar --escrever',
120
+ indiceDiverge: (pr) => `o índice diverge do frontmatter das páginas${pr ? ' (no PR, aviso: o push da main reprova)' : ''}`,
121
+ indiceDivergeCorrecao: 'o índice é gerado do frontmatter: rode ork docs sincronizar --escrever e commite o índice',
122
+ };
123
+ exports.DOCS_EN = {
124
+ resumo: (paginas, features, itens, contexto) => `Documentation: ${paginas} pages (${features} feature(s), ${itens} roadmap item(s), ${contexto} context page(s))`,
125
+ semErro: (avisos) => `OK: no parity error${avisos ? ` · ${avisos} reading warning(s)` : ''}`,
126
+ reprovado: (erros, avisos) => `FAILED: ${erros} error(s)${avisos ? ` · ${avisos} warning(s)` : ''}`,
127
+ tituloErros: 'Errors',
128
+ tituloAvisos: 'Warnings',
129
+ sincronizado: 'In sync: the documentation already matches the ledger and git.',
130
+ aAtualizar: (escreveu, itens, indices) => `${escreveu ? 'Updated' : 'To update'}: ${itens} roadmap item(s), ${indices} index(es).`,
131
+ linhaDaMudanca: (id, campo, de, para, fonte) => {
132
+ const v = (x) => MUDANCAS_EN[x] ?? x;
133
+ return ` ${id.padEnd(7)} ${v(campo)}: ${v(de) || '-'} \u2192 ${v(para)} (${fonte})`;
134
+ },
135
+ indice: (arquivo) => ` index ${arquivo}`,
136
+ nadaGravado: 'Nothing was written. To write: `ork docs sincronizar --escrever`',
137
+ escopo: (escopo) => `Scope: ${escopo}.`,
138
+ escopoTodos: 'every roadmap item',
139
+ escopoSo: (itens) => `only ${itens} (\`--so\`)`,
140
+ escopoDaThread: (itens, thread) => `only ${itens}, the item of thread ${thread} in this worktree (\`--todos\` for every item)`,
141
+ usoSoSemItem: 'usage: ork docs sincronizar --so RM-NNN[,RM-MMM] (the item after `--so` is missing)',
142
+ usoSoInvalido: (recebido) => `usage: ork docs sincronizar --so RM-NNN[,RM-MMM] (got: ${recebido})`,
143
+ uso: 'usage: ork docs verificar [--json] [--pr] | sincronizar [--escrever] [--so RM-NNN] [--todos] | init',
144
+ semFrontmatter: 'page without YAML frontmatter',
145
+ semFrontmatterCorrecao: 'start the file with the template keys between two `---` lines',
146
+ frontmatterInvalido: (erro) => `invalid frontmatter: ${erro}`,
147
+ frontmatterNaoMapa: 'the frontmatter must be a map of keys',
148
+ tipoDesconhecido: (tipo) => `unknown type "${tipo}"`,
149
+ useUmDe: (valores) => `use one of: ${valores}`,
150
+ useUmaDe: (valores) => `use one of: ${valores}`,
151
+ idForaDoPadrao: (id, tipo) => `ID "${id}" does not follow the ${tipo} pattern`,
152
+ formatoEsperado: (formato) => `expected format: ${formato}`,
153
+ arquivoSemId: 'the file name does not start with the ID',
154
+ renomeie: (id) => `rename it to ${id}-<subject>.md`,
155
+ pastaErrada: (tipo, pasta) => `a ${tipo} lives in ${pasta}`,
156
+ idRepetido: (arquivo) => `repeated ID: also in ${arquivo}`,
157
+ idRepetidoCorrecao: 'IDs are stable and unique; renumber the new one, never the old one',
158
+ baseAusente: (branch) => `base branch "${branch}" not found: git parity was left out`,
159
+ baseAusenteCorrecao: 'run with the git history available (`fetch-depth: 0` in CI)',
160
+ faltaChave: (chave) => `missing key "${chave}"`,
161
+ faltaChaveCorrecao: 'copy the key from the template; a gap is written as `To be defined` with an owner and a deadline',
162
+ estadoForaDoPadrao: (estado) => `state "${estado}" outside the standard`,
163
+ categoriaForaDoPadrao: (categoria) => `category "${categoria}" outside the standard`,
164
+ estadoNaoMapa: 'the roadmap state is a map of dimensions',
165
+ dimensoes: (lista) => `dimensions: ${lista}`,
166
+ faltaDimensao: (dim) => `missing dimension estado.${dim}`,
167
+ faltaDimensaoCorrecao: 'the standard updates each dimension separately',
168
+ dimensaoForaDoPadrao: (dim, valor) => `estado.${dim} "${valor}" outside the standard`,
169
+ dimensaoDesconhecida: (dim) => `unknown dimension estado.${dim}`,
170
+ dataSemFuso: (chave, valor) => `${chave} "${valor}" is not ISO 8601 with a timezone`,
171
+ dataExemplo: 'example: 2026-09-24T20:00:00-03:00',
172
+ valorDoModelo: (onde, valor) => `template value not filled in at ${onde}: ${valor}`,
173
+ faltaTabela: (nome) => `missing ${nome} generated from the frontmatter`,
174
+ faltaTabelaCorrecao: 'copy the markers from the template and run `ork docs sincronizar --escrever`',
175
+ tabelaDiverge: (nome) => `${nome} differs from the frontmatter`,
176
+ tabelaDivergeCorrecao: 'the state is edited in the frontmatter; run `ork docs sincronizar --escrever` to regenerate the table',
177
+ nomeDaRelance: 'the summary row',
178
+ nomeDoEstado: 'the "Estado com evidências" table',
179
+ paiDeOutroNivel: (pai, tipo) => `parent "${pai}" is not from the level above ${tipo}`,
180
+ paiNaoExiste: (pai) => `parent ${pai} does not exist`,
181
+ paiNaoExisteCorrecao: 'create the parent page or fix the ID',
182
+ precisaDePai: (tipo) => `a ${tipo} needs a parent`,
183
+ citaInexistente: (chave, alvo, tipo) => `${chave} cites ${alvo}, which does not exist as a ${tipo}`,
184
+ naoCitaDeVolta: (alvo, id) => `${alvo} does not cite ${id} back`,
185
+ naoCitaDeVoltaCorrecao: (id, chave, alvo) => `add ${id} to ${chave} of ${alvo}`,
186
+ linkQuebrado: (alvo) => `broken link: ${alvo}`,
187
+ tituloSemId: 'the title (#) does not start with the ID',
188
+ tituloSemIdCorrecao: (id) => `\`# ${id}\` followed by the name: people and agents find the page by the same name`,
189
+ faltaFrase: 'missing the "> **Em uma frase:**" line right below the title',
190
+ faltaFraseCorrecao: 'write what the page answers, before any detail',
191
+ fraseVazia: 'the opening sentence is empty',
192
+ fraseLonga: (n, limite) => `the opening sentence has ${n} characters (limit ${limite})`,
193
+ fraseLongaCorrecao: 'cut it down to one idea; the rest goes into bullets',
194
+ faltaSecao: (secao) => `missing section "## ${secao}"`,
195
+ faltaSecaoCorrecao: 'if it does not apply, write inside it: `Not applicable: reason`',
196
+ campoDoModelo: (campo) => `template field not filled in: [${campo}]`,
197
+ campoDoModeloCorrecao: 'fill it in, or write `To be defined: owner, deadline` or `Not applicable: reason`',
198
+ paragrafoLongo: (n) => `paragraph with ${n} characters`,
199
+ paragrafoLongoCorrecao: 'break it into bullets: one idea per line',
200
+ fontesNaoMapa: 'fontes is a map (codigo, testes, simbolos, contratos, comandos)',
201
+ caminhoFora: (caminho) => `${caminho}: path outside the repository`,
202
+ caminhoForaCorrecao: 'use a path relative to the root',
203
+ caminhoNaoExiste: (caminho) => `${caminho} does not exist in the repository`,
204
+ caminhoNaoExisteCorrecao: 'the doc describes the code that exists: fix the path or the page',
205
+ simboloForaDoFormato: (simbolo) => `symbol "${simbolo}" is not in the file#name format`,
206
+ arquivoDoSimbolo: (arquivo, simbolo) => `${arquivo} does not exist (symbol ${simbolo})`,
207
+ simboloAusente: (simbolo, arquivo) => `${simbolo} does not appear in ${arquivo}`,
208
+ simboloAusenteCorrecao: 'the code changed its name or the page fell behind',
209
+ contratoAusente: (contrato) => `the contract ${contrato} does not appear in the fontes.codigo files`,
210
+ comandoAusente: (comando) => `the CLI does not declare "${comando}"`,
211
+ comandoAusenteCorrecao: 'check `ork --help`: the doc describes the CLI that exists',
212
+ concluidoSemMerge: 'cycle Concluído with code that is not Mesclado',
213
+ concluidoSemTestes: 'cycle Concluído with tests that are not Aprovados',
214
+ producaoSemMerge: 'deploy in Produção with code that is not Mesclado',
215
+ bloqueadoSemMapa: 'Bloqueado needs the "bloqueio" map',
216
+ bloqueadoSemMapaCorrecao: 'add the `bloqueio` map with motivo, dependencia, responsavel and proxima_revisao',
217
+ mescladoSemCommit: 'code Mesclado without the merge commit',
218
+ mescladoSemCommitCorrecao: 'fill in evidencias.codigo.commit (`ork docs sincronizar` does it from the ledger and git)',
219
+ commitInexistente: (commit) => `commit ${commit} does not exist in this repository`,
220
+ commitForaDaBase: (commit, base) => `commit ${commit} is not in ${base}: the merge did not happen`,
221
+ commitForaDaBaseCorrecao: 'set estado.codigo back to "PR aberto" or "Branch criada" until the merge',
222
+ mergeDaThread: (thread, base, merge, codigo, pr) => `thread ${thread} entered ${base} through merge ${merge} (ship(${thread})), and estado.codigo says "${codigo || 'empty'}"` +
223
+ (pr ? ' (in the PR, a warning: the push to main fails)' : ''),
224
+ mergeDaThreadCorrecao: (base, id) => `open a docs PR on the updated ${base} with \`ork docs sincronizar --escrever --so ${id}\` (the item and the indexes); ` +
225
+ 'if the item has another slice in progress, point `sdlc.thread` to its thread',
226
+ indiceNaoGerado: 'the index was not generated yet',
227
+ indiceNaoGeradoCorrecao: 'run `ork docs sincronizar --escrever`',
228
+ indiceDiverge: (pr) => `the index differs from the frontmatter of the pages${pr ? ' (in the PR, a warning: the push to main fails)' : ''}`,
229
+ indiceDivergeCorrecao: 'the index is generated from the frontmatter: run `ork docs sincronizar --escrever` and commit the index',
230
+ };