@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +195 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/worktree.js CHANGED
@@ -64,6 +64,14 @@ const leases_1 = require("./leases");
64
64
  const thread_1 = require("./thread");
65
65
  const util_1 = require("./util");
66
66
  const estado_thread_1 = require("./estado-thread");
67
+ const procedencia_1 = require("./procedencia");
68
+ const locale_1 = require("./locale");
69
+ /**
70
+ * RM-061 (F3b, G4): o detalhe e a correcao que o resultado devolve nascem pelo catalogo, no locale ativo (pt-BR no
71
+ * escopo da gravacao), e ficam registrados para a impressao remonta-los; o que so vai ao ledger sai sempre em pt-BR.
72
+ */
73
+ const tw = (montar) => (0, locale_1.textoDoCatalogo)((m) => montar(m.worktree));
74
+ const gravado = () => (0, locale_1.msg)('pt-BR').worktree;
67
75
  /**
68
76
  * Diretorio canonico da worktree de uma thread, resolvido pelo `ork` na arvore principal: o mesmo que a criacao usa,
69
77
  * tambem quando o comando roda de dentro de outra worktree (P4 do ensaio da 0.5.0).
@@ -131,8 +139,8 @@ function garantirWorktree(carregado, id) {
131
139
  branch,
132
140
  base,
133
141
  motivo: 'tree.blocked',
134
- detalhe: `${dir} existe mas nao aparece em \`git worktree list\``,
135
- correcao: `remova o diretorio ou registre a worktree; depois rode: ork worktree ensure ${id}`,
142
+ detalhe: tw((m) => m.naoRegistrada(dir)),
143
+ correcao: tw((m) => m.naoRegistradaCorrecao(id)),
136
144
  };
137
145
  }
138
146
  try {
@@ -140,7 +148,7 @@ function garantirWorktree(carregado, id) {
140
148
  }
141
149
  catch (e) {
142
150
  return { ok: false, criada: false, dir, branch, base, motivo: 'tree.blocked',
143
- detalhe: e.message, correcao: `reconcilie o estado e rode ork worktree sync ${id}` };
151
+ detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.reconcilieOEstado(id)) };
144
152
  }
145
153
  if (thread.worktree !== dir) {
146
154
  thread.worktree = dir;
@@ -160,7 +168,7 @@ function garantirWorktree(carregado, id) {
160
168
  branch,
161
169
  base,
162
170
  motivo: null,
163
- detalhe: 'a worktree da thread ja existe e o git a reconhece',
171
+ detalhe: tw((m) => m.jaExiste),
164
172
  correcao: '',
165
173
  };
166
174
  }
@@ -170,7 +178,7 @@ function garantirWorktree(carregado, id) {
170
178
  branchExistente: jaTemBranch ? branch : undefined,
171
179
  });
172
180
  thread.worktree = criada.dir;
173
- thread.base = { branch: criada.branch, commit: thread.base.commit };
181
+ thread.base = { branch: criada.branch, commit: criada.commit };
174
182
  (0, thread_1.gravarThread)(raiz, thread);
175
183
  (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeGarantida, {
176
184
  dir: criada.dir,
@@ -180,16 +188,17 @@ function garantirWorktree(carregado, id) {
180
188
  branchReusada: jaTemBranch,
181
189
  fonte: 'git worktree list --porcelain',
182
190
  });
191
+ // RM-037 (defeito 2 de 19 e 20/10/2026): a worktree recriada nasce sem o que o git ignora, como a nova.
192
+ const dependencias = (0, thread_1.prepararDependenciasDaThread)(carregado, id, criada.dir);
183
193
  return {
184
194
  ok: true,
185
195
  criada: true,
196
+ dependencias,
186
197
  dir: criada.dir,
187
198
  branch: criada.branch,
188
199
  base,
189
200
  motivo: null,
190
- detalhe: jaTemBranch
191
- ? `worktree recriada sobre a branch ${criada.branch}, que ja existia`
192
- : `worktree criada a partir de ${base}`,
201
+ detalhe: tw((m) => jaTemBranch ? m.recriadaSobreBranch(criada.branch) : m.criadaAPartirDe(base)),
193
202
  correcao: '',
194
203
  };
195
204
  }
@@ -258,8 +267,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
258
267
  jaAtualizada: false,
259
268
  rebaseFeito: false,
260
269
  motivo: 'tree.blocked',
261
- detalhe: `a thread ${id} nao tem worktree registrada no git`,
262
- correcao: `crie a worktree com: ork worktree ensure ${id}`,
270
+ detalhe: tw((m) => m.semWorktree(id)),
271
+ correcao: tw((m) => m.semWorktreeCorrecao(id)),
263
272
  };
264
273
  }
265
274
  const limpa = arvoreLimpa(dir);
@@ -270,10 +279,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
270
279
  jaAtualizada: false,
271
280
  rebaseFeito: false,
272
281
  motivo: 'tree.blocked',
273
- detalhe: limpa === null
274
- ? `${dir} nao respondeu a \`git status\``
275
- : `${dir} tem alteracao nao commitada; rebase em arvore suja perde trabalho`,
276
- correcao: `commite ou guarde as alteracoes em ${dir} e rode de novo: ork worktree sync ${id}`,
282
+ detalhe: tw((m) => limpa === null ? m.semStatus(dir) : m.arvoreSuja(dir)),
283
+ correcao: tw((m) => m.arvoreSujaCorrecao(dir, id)),
277
284
  };
278
285
  }
279
286
  try {
@@ -281,7 +288,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
281
288
  }
282
289
  catch (e) {
283
290
  return { ...vazio, ok: false, jaAtualizada: false, rebaseFeito: false,
284
- motivo: 'tree.blocked', detalhe: e.message, correcao: 'reconcilie as duas cópias sem descartar evidências' };
291
+ motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.reconcilieAsCopias) };
285
292
  }
286
293
  const refBase = (0, util_1.exec)('git', ['rev-parse', '--verify', base], raiz);
287
294
  if (!refBase.ok) {
@@ -291,8 +298,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
291
298
  jaAtualizada: false,
292
299
  rebaseFeito: false,
293
300
  motivo: 'tree.blocked',
294
- detalhe: `a base ${base} do manifesto nao existe neste repositorio`,
295
- correcao: `corrija worktree.base_branch em ${carregado.caminho}`,
301
+ detalhe: tw((m) => m.baseInexistente(base)),
302
+ correcao: tw((m) => m.baseInexistenteCorrecao(carregado.caminho)),
296
303
  };
297
304
  }
298
305
  const shaBase = refBase.stdout.trim();
@@ -310,7 +317,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
310
317
  shaAntes,
311
318
  shaDepois: shaAntes,
312
319
  rebaseFeito: false,
313
- detalhe: 'a base ja era ancestral do HEAD da thread',
320
+ detalhe: gravado().jaEraAncestral,
314
321
  });
315
322
  }
316
323
  return {
@@ -322,7 +329,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
322
329
  jaAtualizada: true,
323
330
  rebaseFeito: false,
324
331
  motivo: null,
325
- detalhe: `a base ${base} ja esta incorporada: nada a sincronizar`,
332
+ detalhe: tw((m) => m.jaIncorporada(base)),
326
333
  correcao: '',
327
334
  };
328
335
  }
@@ -336,7 +343,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
336
343
  passos.push(`git reset --keep ${shaBase}`);
337
344
  if (opcoes.dryRun) {
338
345
  return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: true, jaAtualizada: false, rebaseFeito: false, recriada: false,
339
- motivo: null, detalhe: `a branch ${branch} nao tem commit proprio: o sync real a recriaria na base ${base} atual, sem rebase`,
346
+ motivo: null, detalhe: tw((m) => m.semCommitProprio(branch, base)),
340
347
  correcao: '' };
341
348
  }
342
349
  let recriacao;
@@ -345,50 +352,48 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
345
352
  }
346
353
  catch (e) {
347
354
  return { ...vazio, shaBase, shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
348
- motivo: 'tree.blocked', detalhe: e.message,
349
- correcao: 'inspecione a cópia local e a fonte canônica preservadas antes de repetir o sync' };
355
+ motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e),
356
+ correcao: tw((m) => m.inspecioneAsCopias) };
350
357
  }
351
358
  const shaDepois = (0, util_1.exec)('git', ['rev-parse', 'HEAD'], dir).stdout.trim();
352
359
  if (!recriacao.ok || shaDepois !== shaBase) {
353
360
  return { ...vazio, shaBase, shaAntes, shaDepois, ok: false, jaAtualizada: false, rebaseFeito: false, motivo: 'tree.blocked',
354
- detalhe: `a recriacao da branch ${branch} na base falhou: ${(recriacao.stderr || recriacao.stdout).trim().split('\n').slice(-2).join(' | ')}`,
355
- correcao: `confira a worktree ${dir} e rode de novo: ork worktree sync ${id}` };
361
+ detalhe: tw((m) => m.recriacaoFalhou(branch, (recriacao.stderr || recriacao.stdout).trim().split('\n').slice(-2).join(' | '))),
362
+ correcao: tw((m) => m.confiraAWorktree(dir, id)) };
356
363
  }
357
- const detalhe = historia.semAncestral
358
- ? `branch sem commit proprio recriada a partir da base ${base} atual; a base foi reescrita e nao tinha historia em comum com ela`
359
- : `branch sem commit proprio recriada a partir da base ${base} atual`;
364
+ const detalhe = tw((m) => m.recriada(base, historia.semAncestral));
360
365
  (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes, shaDepois,
361
- rebaseFeito: false, recriada: true, semAncestral: historia.semAncestral, detalhe });
366
+ rebaseFeito: false, recriada: true, semAncestral: historia.semAncestral, detalhe: gravado().recriada(base, historia.semAncestral) });
362
367
  return { ...vazio, shaBase, shaAntes, shaDepois, ok: true, jaAtualizada: false, rebaseFeito: false, recriada: true,
363
368
  motivo: null, detalhe, correcao: '' };
364
369
  }
365
370
  if (historia.semAncestral) {
366
- const onto = historia.pontoDePartida
371
+ const onto = (m) => historia.pontoDePartida
367
372
  ? `git -C ${dir} rebase --onto ${shaBase} ${historia.pontoDePartida}`
368
- : `git -C ${dir} rebase --onto ${shaBase} <commit onde a branch da thread comecou>`;
369
- const detalhe = `a base ${base} foi reescrita e nao tem historia em comum com a branch ${branch}, que tem ` +
370
- `${historia.proprios ?? 'um numero desconhecido de'} commit(s) proprio(s): o rebase reaplicaria a historia antiga inteira`;
373
+ : `git -C ${dir} rebase --onto ${shaBase} ${m.ondeComecou}`;
374
+ const detalhe = tw((m) => m.semHistoriaComum(base, branch, historia.proprios));
371
375
  if (!opcoes.dryRun)
372
376
  (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
373
- rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', semAncestral: true, detalhe });
377
+ rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', semAncestral: true,
378
+ detalhe: gravado().semHistoriaComum(base, branch, historia.proprios) });
374
379
  return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
375
- motivo: 'tree.blocked', causa: 'base-reescrita', detalhe, correcao: `reaplique so os commits da thread sobre a base nova: ${onto}` };
380
+ motivo: 'tree.blocked', causa: 'base-reescrita', detalhe, correcao: tw((m) => m.reaplique(onto(m))) };
376
381
  }
377
382
  // RM-037 (fatia 3, defeito 3): com ancestral comum, o sync caia no `git rebase <base>` abaixo e
378
383
  // reaplicava tambem o que a reescrita tirou da base. O ponto de partida fora da base atual e o sinal.
379
384
  if (historia.baseReescrita) {
380
385
  const ponto = historia.pontoDePartida;
381
- passos.push(`git merge-base --is-ancestor ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)} (falso: a base foi reescrita)`);
382
- const detalhe = `a base ${base} foi reescrita: o ponto de partida ${ponto.slice(0, 8)} da branch ${branch} nao esta mais nela, ` +
383
- `e o rebase comum reaplicaria ${historia.sairamDaBase ?? 'um numero desconhecido de'} commit(s) que sairam da base junto com ` +
384
- `o(s) ${historia.proprios ?? '?'} da thread (git rev-list --count HEAD --not ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)})`;
386
+ passos.push(tw((m) => m.passoBaseReescrita(ponto.slice(0, 8), shaBase.slice(0, 8))));
387
+ const contagem = `git rev-list --count HEAD --not ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)}`;
388
+ const reescrita = (m) => m.baseReescrita(base, ponto.slice(0, 8), branch, historia.sairamDaBase, historia.proprios, contagem);
389
+ const detalhe = tw(reescrita);
385
390
  if (!opcoes.dryRun)
386
391
  (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
387
392
  rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', baseReescrita: true, pontoDePartida: ponto,
388
- sairamDaBase: historia.sairamDaBase, proprios: historia.proprios, detalhe });
393
+ sairamDaBase: historia.sairamDaBase, proprios: historia.proprios, detalhe: reescrita(gravado()) });
389
394
  return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
390
395
  motivo: 'tree.blocked', causa: 'base-reescrita', detalhe,
391
- correcao: `reaplique so os commits da thread sobre a base nova: git -C ${dir} rebase --onto ${shaBase} ${ponto}` };
396
+ correcao: tw((m) => m.reaplique(`git -C ${dir} rebase --onto ${shaBase} ${ponto}`)) };
392
397
  }
393
398
  if (opcoes.dryRun) {
394
399
  passos.push(`git rebase ${shaBase}`);
@@ -401,7 +406,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
401
406
  jaAtualizada: false,
402
407
  rebaseFeito: false,
403
408
  motivo: null,
404
- detalhe: `a base ${base} avancou; o sync real faria o rebase acima`,
409
+ detalhe: tw((m) => m.rebaseAcima(base)),
405
410
  correcao: '',
406
411
  };
407
412
  }
@@ -416,8 +421,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
416
421
  }
417
422
  catch (e) {
418
423
  return { ...vazio, shaBase, shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
419
- motivo: 'tree.blocked', detalhe: e.message,
420
- correcao: 'inspecione a cópia local e a fonte canônica preservadas antes de repetir o sync' };
424
+ motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e),
425
+ correcao: tw((m) => m.inspecioneAsCopias) };
421
426
  }
422
427
  passos.push(`git rebase ${shaBase}`);
423
428
  if (!rebase.ok) {
@@ -442,9 +447,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
442
447
  jaAtualizada: false,
443
448
  rebaseFeito: false,
444
449
  motivo: 'tree.blocked',
445
- detalhe: `o rebase sobre ${base} conflitou e foi abortado: ${detalhe}`,
446
- correcao: `resolva o conflito na worktree ${dir} (git rebase ${shaBase} e resolucao manual), ` +
447
- `ou reduza a regiao da thread com um lease path:<glob> menor`,
450
+ detalhe: tw((m) => m.rebaseConflitou(base, detalhe)),
451
+ correcao: tw((m) => m.rebaseConflitouCorrecao(dir, shaBase)),
448
452
  };
449
453
  }
450
454
  const shaDepois = (0, util_1.exec)('git', ['rev-parse', 'HEAD'], dir).stdout.trim();
@@ -456,7 +460,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
456
460
  shaAntes,
457
461
  shaDepois,
458
462
  rebaseFeito: true,
459
- detalhe: `branch da thread rebasada sobre ${base}`,
463
+ detalhe: gravado().rebasada(base),
460
464
  });
461
465
  return {
462
466
  ...vazio,
@@ -467,7 +471,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
467
471
  jaAtualizada: false,
468
472
  rebaseFeito: true,
469
473
  motivo: null,
470
- detalhe: `a base ${base} avancou e a branch ${branch} foi rebasada sobre ela`,
474
+ detalhe: tw((m) => m.rebasadaSobreEla(base, branch)),
471
475
  correcao: '',
472
476
  };
473
477
  }
@@ -485,11 +489,11 @@ function auditarWorktree(carregado, id) {
485
489
  const branchEsperada = branchDaWorktree(thread);
486
490
  const checks = [];
487
491
  checks.push(thread.worktree
488
- ? { nome: 'registro', nivel: 'ok', detalhe: `thread.json aponta para ${thread.worktree}` }
492
+ ? { nome: 'registro', nivel: 'ok', detalhe: tw((m) => m.apontaPara(thread.worktree)) }
489
493
  : {
490
494
  nome: 'registro',
491
495
  nivel: 'fail',
492
- detalhe: 'a thread nao tem worktree registrada no thread.json',
496
+ detalhe: tw((m) => m.semRegistroNoThread),
493
497
  correcao: `ork worktree ensure ${id}`,
494
498
  });
495
499
  const existe = fs.existsSync(dir);
@@ -498,38 +502,47 @@ function auditarWorktree(carregado, id) {
498
502
  : {
499
503
  nome: 'diretorio',
500
504
  nivel: 'fail',
501
- detalhe: `${dir} nao existe no disco`,
505
+ detalhe: tw((m) => m.naoExisteNoDisco(dir)),
502
506
  correcao: `ork worktree ensure ${id}`,
503
507
  });
504
508
  const registro = worktreesDoGit(raiz).find((w) => w.dir === dir);
505
509
  checks.push(registro
506
- ? { nome: 'git', nivel: 'ok', detalhe: 'aparece em `git worktree list --porcelain`' }
510
+ ? { nome: 'git', nivel: 'ok', detalhe: tw((m) => m.apareceNoGit) }
507
511
  : {
508
512
  nome: 'git',
509
513
  nivel: 'fail',
510
- detalhe: `${dir} nao aparece em \`git worktree list\``,
514
+ detalhe: tw((m) => m.naoApareceNoGit(dir)),
511
515
  correcao: `git worktree prune && ork worktree ensure ${id}`,
512
516
  });
513
517
  if (registro) {
514
518
  checks.push(registro.branch === branchEsperada
515
- ? { nome: 'branch', nivel: 'ok', detalhe: `${registro.branch} em check-out` }
519
+ ? { nome: 'branch', nivel: 'ok', detalhe: tw((m) => m.emCheckout(registro.branch)) }
516
520
  : {
517
521
  nome: 'branch',
518
522
  nivel: 'fail',
519
- detalhe: `esperado ${branchEsperada}, encontrado "${registro.branch || '(HEAD solto)'}"`,
523
+ detalhe: tw((m) => m.branchErrada(branchEsperada, registro.branch)),
520
524
  correcao: `git -C ${dir} switch ${branchEsperada}`,
521
525
  });
522
526
  }
527
+ // RM-047 (P2): git so roda na worktree registrada e com o thread.json local.
528
+ let procedencia = null;
523
529
  if (existe) {
530
+ try {
531
+ (0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
532
+ }
533
+ catch (e) {
534
+ procedencia = (0, locale_1.textoDoErro)(e);
535
+ checks.push({ nome: 'procedencia', nivel: 'fail', detalhe: procedencia, correcao: `ork worktree ensure ${id}` });
536
+ }
537
+ }
538
+ if (existe && procedencia === null) {
524
539
  const limpa = arvoreLimpa(dir);
525
540
  checks.push(limpa === true
526
- ? { nome: 'arvore', nivel: 'ok', detalhe: 'sem alteracao nao commitada' }
541
+ ? { nome: 'arvore', nivel: 'ok', detalhe: tw((m) => m.arvoreLimpa) }
527
542
  : {
528
543
  nome: 'arvore',
529
544
  nivel: limpa === null ? 'fail' : 'warn',
530
- detalhe: limpa === null
531
- ? '`git status` nao respondeu neste diretorio'
532
- : 'ha alteracao nao commitada na worktree',
545
+ detalhe: tw((m) => limpa === null ? m.statusSemResposta : m.alteracaoNaWorktree),
533
546
  correcao: `git -C ${dir} status`,
534
547
  });
535
548
  const base = manifesto.worktree.base_branch;
@@ -538,11 +551,11 @@ function auditarWorktree(carregado, id) {
538
551
  const shaBase = refBase.stdout.trim();
539
552
  const incorporada = (0, util_1.exec)('git', ['merge-base', '--is-ancestor', shaBase, 'HEAD'], dir).ok;
540
553
  checks.push(incorporada
541
- ? { nome: 'base', nivel: 'ok', detalhe: `${base} @ ${shaBase.slice(0, 8)} ja incorporada` }
554
+ ? { nome: 'base', nivel: 'ok', detalhe: tw((m) => m.baseIncorporada(base, shaBase.slice(0, 8))) }
542
555
  : {
543
556
  nome: 'base',
544
557
  nivel: 'fail',
545
- detalhe: `a base ${base} avancou para ${shaBase.slice(0, 8)} e nao esta na branch da thread`,
558
+ detalhe: tw((m) => m.baseAdiante(base, shaBase.slice(0, 8))),
546
559
  correcao: `ork worktree sync ${id}`,
547
560
  });
548
561
  }
@@ -553,13 +566,13 @@ function auditarWorktree(carregado, id) {
553
566
  ? {
554
567
  nome: 'artefatos',
555
568
  nivel: 'fail',
556
- detalhe: `os artefatos da thread estao DENTRO da worktree (${dirArtefatos})`,
557
- correcao: 'os artefatos da thread vivem em .orkastery/threads/<id>, fora da arvore',
569
+ detalhe: tw((m) => m.artefatosDentro(dirArtefatos)),
570
+ correcao: tw((m) => m.artefatosDentroCorrecao),
558
571
  }
559
572
  : {
560
573
  nome: 'artefatos',
561
574
  nivel: 'ok',
562
- detalhe: `${path.relative(raiz, dirArtefatos)} fica fora da worktree`,
575
+ detalhe: tw((m) => m.artefatosFora(path.relative(raiz, dirArtefatos))),
563
576
  });
564
577
  if (existe)
565
578
  checks.push((0, estado_thread_1.auditarEstado)(raiz, id, dir));
@@ -575,21 +588,16 @@ function auditarWorktree(carregado, id) {
575
588
  }
576
589
  /** Texto de `ork worktree audit`. */
577
590
  function textoDoAudit(id, r) {
578
- const linhas = [
579
- `Auditoria da worktree da thread ${id}`,
580
- ` dir ${r.dir}`,
581
- ` branch ${r.branch}`,
582
- '',
583
- ];
591
+ // RM-061 (F3b): a moldura pelo catalogo; o nome do check (dado do ledger) traduzido so aqui, e o detalhe remontado.
592
+ const m = (0, locale_1.msg)().worktree;
593
+ const linhas = [m.auditoria(id), m.linhaDir(r.dir), m.linhaBranch(r.branch), ''];
584
594
  for (const c of r.checks) {
585
- linhas.push(` ${(0, util_1.simbolo)(c.nivel)} ${c.nome.padEnd(11)} ${c.detalhe}`);
595
+ linhas.push(` ${(0, util_1.simbolo)(c.nivel)} ${m.nomeDoCheck(c.nome).padEnd(11)} ${(0, locale_1.remontar)(c.detalhe)}`);
586
596
  if (c.nivel !== 'ok' && c.correcao)
587
- linhas.push(` correcao: ${c.correcao}`);
597
+ linhas.push(m.correcaoDoCheck((0, locale_1.remontar)(c.correcao)));
588
598
  }
589
599
  linhas.push('');
590
- linhas.push(r.ok
591
- ? ' worktree consistente: o git confirma cada item acima.'
592
- : ` ${r.divergencias} divergencia(s) encontrada(s) no proprio git.`);
600
+ linhas.push(r.ok ? m.consistente : m.divergencias(r.divergencias));
593
601
  return linhas.join('\n');
594
602
  }
595
603
  /** Solta os leases de escrita que a thread ainda segurava. */
@@ -628,7 +636,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
628
636
  branch,
629
637
  removida: false,
630
638
  leasesLiberados: soltos,
631
- detalhe: 'o diretorio ja nao existia; o registro foi limpo',
639
+ detalhe: gravado().jaNaoExistia,
632
640
  });
633
641
  return {
634
642
  ok: true,
@@ -637,10 +645,18 @@ function liberarWorktree(carregado, id, opcoes = {}) {
637
645
  branch,
638
646
  leasesLiberados: soltos,
639
647
  motivo: null,
640
- detalhe: 'o diretorio ja nao existia; registro limpo e `git worktree prune` rodado',
648
+ detalhe: tw((m) => m.jaNaoExistiaImpresso),
641
649
  correcao: '',
642
650
  };
643
651
  }
652
+ // RM-047 (P2): nada de git num diretorio que o thread.json escolheu e o git nao registra.
653
+ try {
654
+ (0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
655
+ }
656
+ catch (e) {
657
+ return { ok: false, removida: false, dir, branch, leasesLiberados: [], motivo: 'tree.blocked',
658
+ detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.confiraODiretorio(id)) };
659
+ }
644
660
  const limpa = arvoreLimpa(dir);
645
661
  if (limpa === false && !opcoes.forcar) {
646
662
  return {
@@ -650,8 +666,8 @@ function liberarWorktree(carregado, id, opcoes = {}) {
650
666
  branch,
651
667
  leasesLiberados: [],
652
668
  motivo: 'tree.blocked',
653
- detalhe: `${dir} tem alteracao nao commitada`,
654
- correcao: `commite o que interessa em ${dir}, ou repita com --forcar para descartar`,
669
+ detalhe: tw((m) => m.releaseArvoreSuja(dir)),
670
+ correcao: tw((m) => m.releaseArvoreSujaCorrecao(dir)),
655
671
  };
656
672
  }
657
673
  const argumentos = ['worktree', 'remove', dir];
@@ -666,8 +682,8 @@ function liberarWorktree(carregado, id, opcoes = {}) {
666
682
  branch,
667
683
  leasesLiberados: [],
668
684
  motivo: 'tree.blocked',
669
- detalhe: `git worktree remove falhou: ${(r.stderr || r.stdout).trim()}`,
670
- correcao: `rode \`git worktree remove ${dir}\` na mao e confira \`git worktree list\``,
685
+ detalhe: tw((m) => m.removeFalhou((r.stderr || r.stdout).trim())),
686
+ correcao: tw((m) => m.removeFalhouCorrecao(dir)),
671
687
  };
672
688
  }
673
689
  (0, util_1.exec)('git', ['worktree', 'prune'], raiz);
@@ -680,7 +696,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
680
696
  branch,
681
697
  leasesLiberados: [],
682
698
  motivo: 'tree.blocked',
683
- detalhe: `${dir} continua em \`git worktree list\` depois do remove`,
699
+ detalhe: tw((m) => m.continuaNaLista(dir)),
684
700
  correcao: 'git worktree prune && git worktree list',
685
701
  };
686
702
  }
@@ -702,7 +718,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
702
718
  branch,
703
719
  leasesLiberados: soltos,
704
720
  motivo: null,
705
- detalhe: `worktree removida; a branch ${branch} continua no repositorio`,
721
+ detalhe: tw((m) => m.removida(branch)),
706
722
  correcao: '',
707
723
  };
708
724
  }
package/dist/yaml.js CHANGED
@@ -55,10 +55,16 @@ function escalar(bruto) {
55
55
  }
56
56
  return t;
57
57
  }
58
- function preparar(texto) {
58
+ function preparar(texto, estrito) {
59
59
  const linhas = [];
60
60
  texto.split('\n').forEach((original, i) => {
61
- const semComentario = tirarComentario(original).replace(/\s+$/, '');
61
+ const cortada = tirarComentario(original);
62
+ // D9: no modo estrito, o `#` depois do valor nao corta o valor calado (`titulo: Decisao #42`); com o `#`
63
+ // no texto, o valor vai entre aspas. Comentario na linha inteira segue valendo.
64
+ if (estrito && cortada !== original && cortada.trim() !== '') {
65
+ throw new Error(`YAML invalido na linha ${i + 1}: comentario depois do valor (com # no texto, use aspas)`);
66
+ }
67
+ const semComentario = cortada.replace(/\s+$/, '');
62
68
  if (semComentario.trim() === '')
63
69
  return;
64
70
  if (semComentario.trim() === '---')
@@ -68,7 +74,7 @@ function preparar(texto) {
68
74
  });
69
75
  return linhas;
70
76
  }
71
- function parseBloco(linhas, inicio, indent) {
77
+ function parseBloco(linhas, inicio, indent, estrito) {
72
78
  let i = inicio;
73
79
  if (i >= linhas.length)
74
80
  return [null, i];
@@ -89,6 +95,9 @@ function parseBloco(linhas, inicio, indent) {
89
95
  throw new Error(`YAML invalido na linha ${linha.numero}: esperado "chave: valor"`);
90
96
  }
91
97
  const chave = linha.conteudo.slice(0, sep).trim().replace(/^["']|["']$/g, '');
98
+ if (estrito && (chave === '__proto__' || Object.hasOwn(mapa, chave))) {
99
+ throw new Error(`YAML invalido na linha ${linha.numero}: chave ${chave === '__proto__' ? 'reservada' : 'repetida'}`);
100
+ }
92
101
  const resto = linha.conteudo.slice(sep + 1).trim();
93
102
  i++;
94
103
  if (resto !== '') {
@@ -96,7 +105,7 @@ function parseBloco(linhas, inicio, indent) {
96
105
  continue;
97
106
  }
98
107
  if (i < linhas.length && linhas[i].indent > indent) {
99
- const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent);
108
+ const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent, estrito);
100
109
  mapa[chave] = filho;
101
110
  i = proximo;
102
111
  }
@@ -106,11 +115,21 @@ function parseBloco(linhas, inicio, indent) {
106
115
  }
107
116
  return [mapa, i];
108
117
  }
109
- /** Le um documento YAML do subconjunto suportado. */
110
- function lerYaml(texto) {
111
- const linhas = preparar(texto);
118
+ /**
119
+ * Le um documento YAML do subconjunto suportado.
120
+ *
121
+ * RM-026 K7 (D9): `estrito` serve a quem le texto que nao e do `ork` (o frontmatter do conhecimento). Chave
122
+ * repetida no mesmo mapa, `__proto__`, comentario depois do valor e linha que sobra (indentacao fora do bloco)
123
+ * recusam, em vez de sumir calados como no modo padrao, que o `orkastery.yaml` e as paginas de docs seguem usando.
124
+ */
125
+ function lerYaml(texto, opcoes = {}) {
126
+ const estrito = opcoes.estrito === true;
127
+ const linhas = preparar(texto, estrito);
112
128
  if (linhas.length === 0)
113
129
  return {};
114
- const [valor] = parseBloco(linhas, 0, linhas[0].indent);
130
+ const [valor, proximo] = parseBloco(linhas, 0, linhas[0].indent, estrito);
131
+ if (estrito && proximo < linhas.length) {
132
+ throw new Error(`YAML invalido na linha ${linhas[proximo].numero}: indentacao fora do bloco`);
133
+ }
115
134
  return valor;
116
135
  }
@@ -98,6 +98,83 @@
98
98
  "porque": "a regra dos motivos tipados"
99
99
  }
100
100
  ]
101
+ },
102
+ {
103
+ "id": "check-quality/zero-bloqueadores-com-scan",
104
+ "tipo": "borda",
105
+ "gravidade": "maior",
106
+ "cenario": "O scan do CHECK tem achado `new` do laco sem veredito de triagem e um achado `warn`.",
107
+ "esperado": "Nao ha zero bloqueadores: falta o veredito. O `warn` vai ao eixo certo como aviso registrado.",
108
+ "assercoes": [
109
+ {
110
+ "tipo": "contem",
111
+ "valor": "nenhum achado `new` do laco sem veredito resolvido",
112
+ "porque": "a definicao de zero bloqueadores com o scan"
113
+ },
114
+ {
115
+ "tipo": "contem",
116
+ "valor": "aviso registrado",
117
+ "porque": "o warn nao e descartado"
118
+ }
119
+ ]
120
+ },
121
+ {
122
+ "id": "check-quality/inconclusivo-pelo-gate-da-pausa",
123
+ "tipo": "borda",
124
+ "gravidade": "maior",
125
+ "cenario": "O auditor deu inconclusivo a um achado `new` do laco e a sessao do CHECK tenta abrir o pedido ao dono.",
126
+ "esperado": "O pedido sai depois da sessao, pelo `ork gate request` da pausa do bloco; de dentro da sessao ou com motivo livre ele recusa, e sem a pausa o veredito e BLOQUEADO.",
127
+ "assercoes": [
128
+ {
129
+ "tipo": "contem",
130
+ "valor": "Inconclusivo nao abre o pedido de dentro da sessao do CHECK",
131
+ "porque": "a recusa medida na prova ponta a ponta"
132
+ },
133
+ {
134
+ "tipo": "contem",
135
+ "valor": "`ork gate request <thread> --formato telegram`",
136
+ "porque": "o comando que abre a pausa ao dono"
137
+ },
138
+ {
139
+ "tipo": "contem",
140
+ "valor": "`modo nao preve pausa humana nesta fase`",
141
+ "porque": "o modo sem pausa no CHECK"
142
+ },
143
+ {
144
+ "tipo": "contem",
145
+ "valor": "quem conduz aponta ao dono a pergunta do parecer",
146
+ "porque": "o pedido do gate leva so a pergunta generica"
147
+ },
148
+ {
149
+ "tipo": "contem",
150
+ "valor": "A resposta do dono vira claim do CHECK",
151
+ "porque": "a resposta chega ao GO-FIX pelo mesmo caminho"
152
+ },
153
+ {
154
+ "tipo": "contem",
155
+ "valor": "#Look e #Ork tambem pausavam no CHECK, mas estao aposentados (I-43)",
156
+ "porque": "a lista de modos com a pausa"
157
+ }
158
+ ]
159
+ },
160
+ {
161
+ "id": "check-quality/veredito-por-achado-no-fix-open",
162
+ "tipo": "caminho-feliz",
163
+ "gravidade": "maior",
164
+ "cenario": "O CHECK reprovou pelo scan com um achado real e um falso positivo triados.",
165
+ "esperado": "O `ork fix open` abre uma correcao por claim do CHECK, tipo B para o real e tipo A para o falso positivo.",
166
+ "assercoes": [
167
+ {
168
+ "tipo": "contem",
169
+ "valor": "`ork fix open <thread>` reexecuta o verify e abre uma correcao por claim reprovada",
170
+ "porque": "o mecanismo real do veredito por achado"
171
+ },
172
+ {
173
+ "tipo": "contem",
174
+ "valor": "tipo A para o falso positivo (`claims.unverifiable`)",
175
+ "porque": "o tipo que a claim sem comando produz"
176
+ }
177
+ ]
101
178
  }
102
179
  ]
103
180
  }