@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
package/dist/verify.js CHANGED
@@ -12,11 +12,49 @@
12
12
  * agora falha) de DIVIDA PRE-EXISTENTE (ja falhava). Sem baseline, a falha e
13
13
  * declarada como `verify.failed`, e nao como regressao que nao da para provar.
14
14
  */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
15
48
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ESPERA_PADRAO_DA_FILA_PESADA_MS = exports.ESPERA_DA_FILA_PESADA_MS = exports.PREFIXO_BLOQUEADO_NO_VERIFY = exports.TIMEOUT_VERIFY_MS = void 0;
49
+ exports.ESPERA_PADRAO_DA_FILA_PESADA_MS = exports.ESPERA_DA_FILA_PESADA_MS = exports.MARGEM_MAX_DO_SCAN_MS = exports.PREFIXO_BLOQUEADO_NO_VERIFY = exports.TIMEOUT_VERIFY_MS = void 0;
17
50
  exports.ambienteDoVerify = ambienteDoVerify;
18
51
  exports.prazoDoComando = prazoDoComando;
52
+ exports.prazoInternoDoScan = prazoInternoDoScan;
53
+ exports.ehComandoDoScan = ehComandoDoScan;
54
+ exports.prazoDaExecucao = prazoDaExecucao;
55
+ exports.executorDoManifesto = executorDoManifesto;
19
56
  exports.executar = executar;
57
+ exports.resultadoDoProcesso = resultadoDoProcesso;
20
58
  exports.semVereditoPorTempo = semVereditoPorTempo;
21
59
  exports.executorComSteal = executorComSteal;
22
60
  exports.identidadeDoProduto = identidadeDoProduto;
@@ -25,15 +63,23 @@ exports.comandoNoLedger = comandoNoLedger;
25
63
  exports.comandosDoManifesto = comandosDoManifesto;
26
64
  exports.cwdDaThread = cwdDaThread;
27
65
  exports.commitReal = commitReal;
66
+ exports.executorDaRodada = executorDaRodada;
67
+ exports.ambienteDoModo = ambienteDoModo;
68
+ exports.vereditoDaBaseline = vereditoDaBaseline;
28
69
  exports.gravarBaseline = gravarBaseline;
29
70
  exports.verificarClaim = verificarClaim;
30
71
  exports.verificar = verificar;
72
+ exports.linhasDaBaseline = linhasDaBaseline;
31
73
  exports.textoDoVerify = textoDoVerify;
32
74
  const claims_1 = require("./claims");
33
75
  const gates_1 = require("./gates");
34
76
  const ledger_1 = require("./ledger");
35
77
  const thread_1 = require("./thread");
78
+ const estado_thread_1 = require("./estado-thread");
79
+ const dependencias_da_worktree_1 = require("./dependencias-da-worktree");
80
+ const fs = __importStar(require("node:fs"));
36
81
  const node_fs_1 = require("node:fs");
82
+ const path = __importStar(require("node:path"));
37
83
  const node_path_1 = require("node:path");
38
84
  const node_crypto_1 = require("node:crypto");
39
85
  const util_1 = require("./util");
@@ -46,6 +92,11 @@ const fila_pesada_1 = require("./fila-pesada");
46
92
  const redacao_url_1 = require("./redacao-url");
47
93
  const conducao_1 = require("./conducao");
48
94
  const procedencia_1 = require("./procedencia");
95
+ const dado_privado_1 = require("./dado-privado");
96
+ const policies_1 = require("./policies");
97
+ const check_modo_1 = require("./check-modo");
98
+ const check_agil_1 = require("./check-agil");
99
+ const check_paralelo_1 = require("./check-paralelo");
49
100
  /** Teto de tempo de um comando de verificacao (build e suite completa cabem). */
50
101
  exports.TIMEOUT_VERIFY_MS = 10 * 60 * 1000;
51
102
  /** Ultimas linhas da saida real, o suficiente para servir de evidencia no ledger. */
@@ -66,14 +117,60 @@ const TIMEOUT_BIN = '/usr/bin/timeout';
66
117
  * valvula de escape: comando que precise delas vira escalacao para humano.
67
118
  */
68
119
  exports.PREFIXO_BLOQUEADO_NO_VERIFY = 'ORK_HITL_';
120
+ /**
121
+ * RM-072 (S-b do CHECK 2): as variaveis de uma rodada do Agile. Cada rodada poe as suas onde precisa; herdadas de outra
122
+ * rodada (o verify que roda dentro de um comando de outro verify), elas levariam pecas ao relatorio errado.
123
+ */
124
+ const VARIAVEIS_DA_RODADA = new Set([check_modo_1.ENV_RELATORIO_DO_CHECK, check_modo_1.ENV_VARREDURA_PARALELA_DO_CHECK]);
69
125
  function ambienteDoVerify(base = process.env) {
70
- return Object.fromEntries(Object.entries(base).filter(([chave]) => !chave.startsWith(exports.PREFIXO_BLOQUEADO_NO_VERIFY)));
126
+ return Object.fromEntries(Object.entries(base).filter(([chave]) => !chave.startsWith(exports.PREFIXO_BLOQUEADO_NO_VERIFY)
127
+ && !VARIAVEIS_DA_RODADA.has(chave)));
71
128
  }
72
129
  /** I-37 (D2): o prazo de um comando, resolvido uma vez por rodada (D3). */
73
130
  function prazoDoComando(manifesto, nome) {
74
131
  const porComando = manifesto.verify.timeout_ms_por_comando;
75
132
  return porComando?.[nome] ?? manifesto.verify.timeout_ms ?? exports.TIMEOUT_VERIFY_MS;
76
133
  }
134
+ /** Teto da margem que o `security_scan` reserva, dentro do proprio prazo, para os passos que ele nao limita. */
135
+ exports.MARGEM_MAX_DO_SCAN_MS = 300_000;
136
+ /**
137
+ * O prazo interno da rodada do scan (`ORK_SECURITY_SCAN_DEADLINE_MS`): o prazo do comando menos a margem
138
+ * `min(300 s, prazo/4)`, que cobre worktree add, sondas e `docker rm`. Assim a rodada termina, com `failed/timeout`
139
+ * declarado, antes de o `timeout(1)` do verify matar o comando sem relatorio.
140
+ */
141
+ function prazoInternoDoScan(prazoMs) {
142
+ return prazoMs - Math.min(exports.MARGEM_MAX_DO_SCAN_MS, Math.floor(prazoMs / 4));
143
+ }
144
+ /**
145
+ * O comando roda o `security_scan`: pelo nome (verify, bundle do CI) ou por ser, na claim, o mesmo comando declarado em
146
+ * `verify.security_scan`. Sem a chave, nada e scan.
147
+ */
148
+ function ehComandoDoScan(manifesto, nome, comando) {
149
+ if (nome === 'security_scan')
150
+ return true;
151
+ const scan = manifesto.verify.security_scan?.trim();
152
+ return !!scan && comando.trim() === scan;
153
+ }
154
+ /**
155
+ * O prazo de um comando do manifesto ou de uma claim: a claim que roda o scan ganha o prazo do `security_scan`. RM-072
156
+ * (D4): a lane do Agile (`test:<lane>`) tem o prazo do `test` que ela substitui.
157
+ */
158
+ function prazoDaExecucao(manifesto, nome, comando) {
159
+ return prazoDoComando(manifesto, ehComandoDoScan(manifesto, nome, comando) ? 'security_scan' : nome.startsWith('test:') ? 'test' : nome);
160
+ }
161
+ /**
162
+ * O executor resolvido pelo manifesto: prazo de cada comando e, no scan, o prazo interno no ambiente. RM-072 (D2):
163
+ * `ambienteDaRodada` e o que a rodada passa a todo comando dela (o modo do CHECK); o CI hospedado nao passa nada.
164
+ */
165
+ function executorDoManifesto(manifesto, ambienteDaRodada) {
166
+ return (nome, comando, cwd) => {
167
+ const prazo = prazoDaExecucao(manifesto, nome, comando);
168
+ const extra = ehComandoDoScan(manifesto, nome, comando)
169
+ ? { ORK_SECURITY_SCAN_DEADLINE_MS: String(prazoInternoDoScan(prazo)) }
170
+ : undefined;
171
+ return executar(nome, comando, cwd, prazo, ambienteDaRodada || extra ? { ...ambienteDaRodada, ...extra } : undefined);
172
+ };
173
+ }
77
174
  /**
78
175
  * Executa um comando de verificacao pelo shell, no diretorio de trabalho da thread.
79
176
  *
@@ -83,14 +180,20 @@ function prazoDoComando(manifesto, nome) {
83
180
  * o proprio `ork` morrer no meio, o `timeout` segue de pe e encerra o grupo no prazo.
84
181
  * O estouro continua saindo como `code: -1`, o contrato de antes.
85
182
  */
86
- function executar(nome, comando, cwd, tetoMs = exports.TIMEOUT_VERIFY_MS) {
183
+ function executar(nome, comando, cwd, tetoMs = exports.TIMEOUT_VERIFY_MS, ambienteExtra) {
87
184
  const comGrupo = (0, node_fs_1.existsSync)(TIMEOUT_BIN);
88
185
  const inicio = Date.now();
89
- const ambiente = ambienteDoVerify();
186
+ const ambiente = { ...ambienteDoVerify(), ...ambienteExtra };
90
187
  const r = comGrupo
91
188
  ? (0, util_1.exec)(TIMEOUT_BIN, ['--kill-after=15', `${Math.ceil(tetoMs / 1000)}`, 'bash', '-c', comando], cwd, tetoMs + 30_000, ambiente)
92
189
  : (0, util_1.exec)('bash', ['-c', comando], cwd, tetoMs, ambiente);
93
- const duracaoMs = Date.now() - inicio;
190
+ return resultadoDoProcesso(nome, comando, r, comGrupo, Date.now() - inicio, tetoMs);
191
+ }
192
+ /**
193
+ * RM-072 (D6): o resultado de um comando a partir do que o processo devolveu, o mesmo para o `executar` e para o grupo
194
+ * paralelo do Agile (`check-paralelo.ts`), para os dois julgarem estouro, sinal e saida da mesma forma.
195
+ */
196
+ function resultadoDoProcesso(nome, comando, r, comGrupo, duracaoMs, tetoMs) {
94
197
  const causa = causaDoEncerramento({ code: r.code, signal: r.signal ?? null, error: r.error, comGrupo, duracaoMs, tetoMs });
95
198
  const estourou = causa === 'timeout';
96
199
  const resultado = {
@@ -191,10 +294,15 @@ function causaDoEncerramento(r) {
191
294
  }
192
295
  /** I-37 (D8): o que o ledger grava de um comando. Sucesso e o codigo 0; falha leva a evidencia. */
193
296
  function comandoNoLedger(c) {
297
+ // RM-072 (D2): a duracao vai tambem no comando que passa, para a meta do CHECK ser medida pelo ledger. RM-072 (D4, D5):
298
+ // no Agile, o uso do preparo e as lanes; o Classic nao tem esses campos.
299
+ const doAgile = { ...(c.preparo ? { preparo: c.preparo } : {}),
300
+ ...(c.lanes ? { lanes: c.lanes.map((l) => ({ ...l, comando: (0, redacao_url_1.redigirCredenciaisUrl)(l.comando) })) } : {}),
301
+ ...(c.comandoExecutado ? { comandoExecutado: (0, redacao_url_1.redigirCredenciaisUrl)(c.comandoExecutado) } : {}) };
194
302
  if (c.ok)
195
- return { nome: c.nome, ok: true, code: c.code };
303
+ return { nome: c.nome, ok: true, code: c.code, ...(c.duracaoMs !== undefined ? { duracaoMs: c.duracaoMs } : {}), ...doAgile };
196
304
  return {
197
- nome: c.nome, comando: (0, redacao_url_1.redigirCredenciaisUrl)(c.comando), ok: false, code: c.code,
305
+ nome: c.nome, comando: (0, redacao_url_1.redigirCredenciaisUrl)(c.comando), ok: false, code: c.code, ...doAgile,
198
306
  ...(c.causa ? { causa: c.causa } : {}),
199
307
  ...(c.prazoMs !== undefined ? { prazoMs: c.prazoMs } : {}),
200
308
  ...(c.duracaoMs !== undefined ? { duracaoMs: c.duracaoMs } : {}),
@@ -207,7 +315,7 @@ function comandoNoLedger(c) {
207
315
  /** Comandos declarados em `verify:` no manifesto, na ordem canonica. */
208
316
  function comandosDoManifesto(manifesto) {
209
317
  const lista = [];
210
- for (const nome of ['typecheck', 'build', 'test']) {
318
+ for (const nome of ['typecheck', 'build', 'test', 'security_scan']) {
211
319
  const comando = manifesto.verify[nome];
212
320
  if (comando && comando.trim() !== '')
213
321
  lista.push({ nome, comando });
@@ -257,27 +365,213 @@ function pedidoDoVerify(carregado, threadId, operacao, comandos, conducao) {
257
365
  /** O executor que renova o prazo da conducao antes de cada comando (D3). */
258
366
  function executorSobConducao(base, manifesto, conducao) {
259
367
  return (nome, comando, cwd) => {
260
- conducao.renovar(prazoDoComando(manifesto, nome));
368
+ conducao.renovar(prazoDaExecucao(manifesto, nome, comando));
261
369
  return base(nome, comando, cwd);
262
370
  };
263
371
  }
264
- /** `ork verify --baseline`: grava o estado do mundo ANTES do GO. */
265
- function gravarBaseline(carregado, threadId, executor = executar, conducao = {}, origem = 'cli') {
372
+ /**
373
+ * RM-037 (defeitos de 19 e 20/10/2026, defeito 1): o executor de uma rodada, o mesmo no verify e na baseline. O prazo
374
+ * de cada comando sai do manifesto (`executorDoManifesto`, que tambem da ao scan o prazo interno), e o steal e medido na
375
+ * janela de cada um, com os testes de relogio do registro de instabilidade da arvore verificada. A baseline rodava pelo
376
+ * `executar` com o teto padrao de 600 s: em 20/10 a suite desta VPS passou disso, e o `test` foi gravado como "ja
377
+ * falhava" com o manifesto dando 2400 s.
378
+ */
379
+ function executorDaRodada(manifesto, instabilidade, base, leitor = steal_1.lerProcStat, ambienteDaRodada) {
380
+ return executorComSteal(base ?? executorDoManifesto(manifesto, ambienteDaRodada), leitor, (0, instabilidade_1.testesDeRelogioVigentes)(instabilidade));
381
+ }
382
+ /** RM-072 (D2): o que a rodada passa a todo comando dela, nos dois modos: o modo do CHECK. */
383
+ function ambienteDoModo(check) {
384
+ return { [check_modo_1.ENV_MODO_DO_CHECK]: check.modo };
385
+ }
386
+ /** RM-072 (D1, D2): o modo da rodada, como vai ao ledger. */
387
+ function checkNoLedger(check) {
388
+ return { modo: check.modo, origem: check.origem, nome: check.nome };
389
+ }
390
+ /** RM-072 (D5): a guarda do produto no fim do preparo; sem preparo, ou com ele reprovado, nada e reaproveitado. */
391
+ function guardaDoPreparo(manifesto, cwd, preparo) {
392
+ return new check_agil_1.GuardaDoProduto(cwd, manifesto.check?.agile?.produto, identidadeDoProduto, preparo ? (preparo.ok ? null : 'preparo-falhou') : 'sem-preparo');
393
+ }
394
+ /**
395
+ * RM-072 (S-b do CHECK 2, N5 do CHECK 3): no Agile, so quem escreve no relatorio da rodada o recebe, a varredura e as
396
+ * lanes; o `build`, o `typecheck` e o `verify.test` (em serie ou no grupo) recebem so o modo, como as claims. O teste que
397
+ * roda a varredura dentro do `verify.test` gravaria pecas de fixture no relatorio da rodada.
398
+ */
399
+ function recebeORelatorio(nome) {
400
+ return nome === 'security_scan' || nome.startsWith('test:');
401
+ }
402
+ function soAVarreduraEAsLanesComRelatorio(comRelatorio, semRelatorio) {
403
+ return (nome, comando, cwd) => (recebeORelatorio(nome) ? comRelatorio : semRelatorio)(nome, comando, cwd);
404
+ }
405
+ /**
406
+ * RM-072 (D6): o executor do grupo do Agile. Sem executor injetado, o processo auxiliar roda os comandos ao mesmo tempo,
407
+ * cada um com o prazo e o ambiente que o `executorDoManifesto` daria a ele (o do scan com o prazo interno), o steal medido
408
+ * na janela do grupo e a conducao renovada com o maior prazo. Com executor injetado (MCP, testes), um por vez, por ele.
409
+ */
410
+ function executorDoGrupo(manifesto, ambienteDaRodada, instabilidade, leitor, conducao, injetado) {
411
+ if (injetado)
412
+ return (itens, cwd) => itens.map((i) => injetado(i.nome, i.comando, cwd));
413
+ const relogio = (0, instabilidade_1.testesDeRelogioVigentes)(instabilidade);
414
+ // N5 do CHECK 3: no grupo, como em serie, so a varredura e as lanes recebem o relatorio da rodada.
415
+ const { [check_modo_1.ENV_RELATORIO_DO_CHECK]: _relatorio, ...semRelatorio } = ambienteDaRodada;
416
+ return (itens, cwd) => {
417
+ const prazos = itens.map((i) => prazoDaExecucao(manifesto, i.nome, i.comando));
418
+ const paraOAuxiliar = itens.map((i, k) => ({ nome: i.nome, comando: i.comando, cwd, prazoMs: prazos[k],
419
+ ...(i.nice ? { nice: i.nice } : {}), ...(i.apos?.length ? { apos: i.apos } : {}),
420
+ ambiente: { ...(recebeORelatorio(i.nome) ? ambienteDaRodada : semRelatorio), ...(ehComandoDoScan(manifesto, i.nome, i.comando)
421
+ // RM-072: ao lado das lanes, a varredura roda poucas ferramentas por vez, para o grupo nao passar da CPU.
422
+ ? { ORK_SECURITY_SCAN_DEADLINE_MS: String(prazoInternoDoScan(prazos[k])),
423
+ ...(itens.length > 1 ? { [check_modo_1.ENV_VARREDURA_PARALELA_DO_CHECK]: String((0, check_agil_1.paralelismoDaVarreduraNoGrupo)()) } : {}) } : {}) } }));
424
+ // A conducao cobre o grupo inteiro: com a lane encadeada, a varredura e a lane somam.
425
+ conducao.renovar((0, check_paralelo_1.esperaDoGrupo)(paraOAuxiliar));
426
+ const janela = (0, steal_1.abrirJanela)(leitor);
427
+ const processos = (0, check_paralelo_1.rodarEmParalelo)(paraOAuxiliar, ambienteDoVerify());
428
+ const stealPct = janela.fechar();
429
+ return processos.map((p, k) => {
430
+ const r = { ...resultadoDoProcesso(itens[k].nome, itens[k].comando, p, p.comGrupo, p.duracaoMs, prazos[k]), stealPct };
431
+ // S1 do CHECK: o auxiliar que morreu sem gravar o resultado deixa o comando sem veredito, nunca uma regressao.
432
+ if (p.semResultado)
433
+ r.executado = false;
434
+ if (!r.ok && r.causa !== 'timeout' && r.executado !== false && (0, steal_1.stealAlto)(stealPct)) {
435
+ const testes = (0, steal_1.reprovacaoSoDeRelogio)(r.falhasDeTeste, relogio);
436
+ if (testes)
437
+ r.relogioSobSteal = testes;
438
+ }
439
+ return r;
440
+ });
441
+ };
442
+ }
443
+ /**
444
+ * RM-072 (D8): le o relatorio das pecas da rodada, grava a lista inteira de cada lane em
445
+ * `.orkastery/threads/<id>/check/<commit>-lanes.json` e devolve o resumo do Agile para o `verify_run`.
446
+ */
447
+ function agileNoLedger(raiz, threadId, commit, pecasDoVerify, doAgile, guarda, relatorio, claims) {
448
+ const linhas = relatorio.ler();
449
+ relatorio.fechar();
450
+ const doRelatorio = (0, check_agil_1.pecasDoRelatorio)(linhas);
451
+ const listas = (0, check_agil_1.listasDasLanes)(linhas);
452
+ const usos = claims.flatMap((c) => c.execucoes.map((e) => e.preparo).filter((u) => !!u));
453
+ const resumo = {
454
+ pecas: [...pecasDoVerify, ...doRelatorio],
455
+ grupo: { paralelo: doAgile?.paralelo ?? false, lanes: doAgile?.lanes ?? [] },
456
+ produto: guarda.hashCurto(),
457
+ claims: { reaproveitadas: usos.filter((u) => u.reaproveitado).length, inteiras: usos.filter((u) => !u.reaproveitado).length },
458
+ lanes: listas.map((l) => ({ lane: l.lane, arquivos: l.arquivos.length, sha256: l.sha256 })),
459
+ orcamento: linhas.filter((l) => l.tipo === 'duracoes').map(({ tipo: _tipo, ...resto }) => resto),
460
+ };
461
+ if (listas.length > 0) {
462
+ // S10 do CHECK: o caminho vai relativo a raiz do estado (`.orkastery/threads/...`), nao a worktree de onde rodou.
463
+ const arquivo = path.join((0, thread_1.dirThread)(raiz, threadId), 'check', `${commit.slice(0, 12)}-lanes.json`);
464
+ try {
465
+ fs.mkdirSync(path.dirname(arquivo), { recursive: true, mode: 0o700 });
466
+ fs.writeFileSync(arquivo, JSON.stringify({ commit, lanes: listas.map((l) => ({ lane: l.lane, arquivos: l.arquivos })) }, null, 1) + '\n', { mode: 0o600 });
467
+ resumo.evidencia = path.relative((0, estado_thread_1.raizDoEstado)(raiz), arquivo);
468
+ }
469
+ catch { /* sem o arquivo, o ledger ainda guarda a contagem e o sha256 de cada lane */ }
470
+ }
471
+ return resumo;
472
+ }
473
+ /**
474
+ * RM-037 (defeito 1 de 19 e 20/10/2026): so a falha com veredito vale como "ja falhava". Estouro do prazo, reprovacao
475
+ * so de teste com relogio sob steal, morte por sinal e comando que nem rodou dizem que a maquina decidiu, e nao o
476
+ * codigo; uma falha atual desse comando nao pode passar por divida anterior.
477
+ */
478
+ function vereditoDaBaseline(c) {
479
+ if (c.ok)
480
+ return 'passava';
481
+ if (semVereditoPorTempo(c) || c.executado === false)
482
+ return 'sem-veredito';
483
+ return terminoNormal(c) ? 'ja-falhava' : 'sem-veredito';
484
+ }
485
+ /**
486
+ * Achado 1 do CHECK da RM-037 (20/10/2026): o maior codigo de saida que e do proprio comando. De 124 em diante, quem fala
487
+ * e quem nao deixou o comando terminar: 124 e o prazo do `timeout(1)` de dentro do comando (o de fora so o conta como
488
+ * estouro quando o tempo dele chegou), 125 e 126 sao o `timeout(1)` ou o shell que nao rodaram o comando, 127 o comando
489
+ * que nao existe, e de 128 em diante vem a morte por sinal (128 + sinal, do shell e do GNU `timeout`).
490
+ */
491
+ const MAIOR_CODIGO_DO_COMANDO = 123;
492
+ /**
493
+ * O comando terminou sozinho e disse o codigo: `causa: exit` (ou nenhuma, na baseline de antes da I-37, em que o estouro
494
+ * saia como `code: -1`) com codigo de 1 a 123. Sinal, falta do codigo de saida e os codigos de quem nao deixou o
495
+ * comando terminar nao provam nada do codigo do HEAD. O `timeout(1)` do uutils devolve so o numero do sinal que ele
496
+ * trata (15 no SIGTERM), igual a uma saida do comando: esse fica de fora, como na `causaDoEncerramento`.
497
+ */
498
+ function terminoNormal(c) {
499
+ return (c.causa === undefined || c.causa === 'exit') && Number.isInteger(c.code) && c.code >= 1
500
+ && c.code <= MAIOR_CODIGO_DO_COMANDO;
501
+ }
502
+ /**
503
+ * RM-037 (CHECK 3 da ork-rm037defeit2): a baseline e o verify nunca rodam sobre a worktree cujo preparo a criacao adiou
504
+ * (o passo do arco abre a thread sob a trava de despacho) e que ainda nao deu certo. O preparo pendente roda aqui, com a
505
+ * vez na fila pesada que a operacao ja segura, a conducao renovada pelo prazo dele e o executor da operacao quando ela
506
+ * traz um (o do sandbox do `ork_verify` do MCP, com o prazo dele). A falha recusa a operacao inteira antes do primeiro
507
+ * comando, porque sem as dependencias a baseline chamaria de "ja falhava" a falta de pacote, e o verify, de regressao.
508
+ */
509
+ function exigirDependenciasDaWorktree(carregado, threadId, cwd, operacao, conducao, executor) {
510
+ const preparo = (0, thread_1.prepararDependenciasPendentes)(carregado, threadId, cwd, { antes: () => conducao.renovar(dependencias_da_worktree_1.PRAZO_DAS_DEPENDENCIAS_MS), executor });
511
+ if (!preparo || preparo.ok)
512
+ return;
513
+ throw new locale_1.ErroDoCatalogo((m) => m.verify.dependenciasPendentesFalharam(operacao, (0, redacao_url_1.redigirCredenciaisUrl)(preparo.comando), preparo.code, preparo.causa === 'timeout', cwd, (0, dependencias_da_worktree_1.ultimaLinhaDoPreparo)(preparo)));
514
+ }
515
+ /** `ork verify --baseline`: grava o estado do mundo ANTES do GO. Sem `executor`, o da rodada (`executorDaRodada`). */
516
+ function gravarBaseline(carregado, threadId, executor, conducao = {}, origem = 'cli', leitor = steal_1.lerProcStat, modo) {
266
517
  const pedido = pedidoDoVerify(carregado, threadId, 'baseline', comandosDoManifesto(carregado.manifesto).length, conducao);
267
- return (0, conducao_1.comConducao)(carregado.raiz, threadId, pedido, (tomada) => naFilaPesada(carregado, threadId, 'baseline', conducao, () => gravarBaselineSobConducao(carregado, threadId, executorSobConducao(executor, carregado.manifesto, tomada), origem)));
518
+ return (0, conducao_1.comConducao)(carregado.raiz, threadId, pedido, (tomada) => naFilaPesada(carregado, threadId, 'baseline', conducao, () => gravarBaselineSobConducao(carregado, threadId, executor, tomada, origem, leitor, modo)));
268
519
  }
269
- function gravarBaselineSobConducao(carregado, threadId, executor, origem) {
520
+ function gravarBaselineSobConducao(carregado, threadId, base, tomada, origem, leitor, modo) {
270
521
  const { raiz, manifesto } = carregado;
271
522
  const thread = (0, thread_1.lerThread)(raiz, threadId);
272
523
  const cwd = cwdDaThread(raiz, thread);
273
- const comandos = comandosDoManifesto(manifesto).map((c) => executor(c.nome, c.comando, cwd));
274
- const baseline = { commit: commitReal(cwd), gravadaEm: (0, util_1.agora)(), comandos };
524
+ exigirDependenciasDaWorktree(carregado, threadId, cwd, 'baseline', tomada, base);
525
+ // RM-072 (D1, D2): a baseline roda e grava no modo da rodada, como o verify.
526
+ const check = (0, check_modo_1.resolverModo)(manifesto.check?.mode, modo);
527
+ const relatorio = check.modo === 'agile' ? new check_agil_1.RelatorioDoCheck() : null;
528
+ const ambienteDaRodada = { ...ambienteDoModo(check), ...relatorio?.ambiente() };
529
+ const instabilidade = (0, instabilidade_1.lerRegistroDeInstabilidade)(cwd);
530
+ const executor = executorSobConducao(executorDaRodada(manifesto, instabilidade, base, leitor, ambienteDaRodada), manifesto, tomada);
531
+ // RM-072 (S-b do CHECK 2): fora do preparo, so a varredura e as lanes recebem o relatorio.
532
+ const executorDosComandos = relatorio
533
+ ? soAVarreduraEAsLanesComRelatorio(executor, executorSobConducao(executorDaRodada(manifesto, instabilidade, base, leitor, ambienteDoModo(check)), manifesto, tomada))
534
+ : executor;
535
+ // RM-072 (D4): no Agile com o produto declarado, o preparo, a guarda e o mesmo grupo do verify; sem o produto, nada
536
+ // seria reaproveitado e os comandos rodam como no Classic.
537
+ // RM-072 (A6 do CHECK): as pecas do preparo, do grupo e do relatorio vao ao `baseline_recorded`, como no `verify_run`.
538
+ const pecasDaBaseline = [];
539
+ const comandos = relatorio && manifesto.check?.agile?.produto?.length
540
+ ? (() => {
541
+ const p = (0, check_agil_1.prepararNoAgile)(manifesto, cwd, executor);
542
+ pecasDaBaseline.push(...p.pecas);
543
+ const r = (0, check_agil_1.comandosNoAgile)(manifesto, cwd, comandosDoManifesto(manifesto), executorDosComandos, executorDoGrupo(manifesto, ambienteDaRodada, instabilidade, leitor, tomada, base ? executor : undefined), guardaDoPreparo(manifesto, cwd, p.resultado), p.resultado);
544
+ pecasDaBaseline.push(...r.pecas);
545
+ return r.comandos;
546
+ })()
547
+ : comandosDoManifesto(manifesto).map((c) => executorDosComandos(c.nome, c.comando, cwd));
548
+ if (relatorio) {
549
+ if (base)
550
+ pecasDaBaseline.push(check_agil_1.PECA_SEM_RELATORIO);
551
+ pecasDaBaseline.push(...(0, check_agil_1.pecasDoRelatorio)(relatorio.ler()));
552
+ relatorio.fechar();
553
+ }
554
+ // N1 do CHECK 2: a lane que saiu com 127 tambem e dependencia ausente, como o comando so do Classic.
555
+ const naoEncontrado = comandos.find((c) => c.causa === 'nao-encontrado')
556
+ ?? comandos.flatMap((c) => (c.lanes ?? []).filter((l) => l.causa === 'nao-encontrado')
557
+ .map((l) => ({ nome: `${c.nome}:${l.lane}`, code: l.code, comando: l.comando })))[0];
558
+ if (naoEncontrado) {
559
+ // Uma dependencia ausente nao e divida do codigo: o comando nem chegou a existir. Gravar isso
560
+ // como "ja falhava" faria todo verify futuro aceitar a falta da ferramenta como baseline.
561
+ throw new locale_1.ErroDoCatalogo((m) => m.verify.baselineDependenciaAusente(naoEncontrado.nome, naoEncontrado.code, (0, redacao_url_1.redigirCredenciaisUrl)(naoEncontrado.comando), manifesto.worktree.dependencias ?? null));
562
+ }
563
+ const baseline = { commit: commitReal(cwd), gravadaEm: (0, util_1.agora)(), comandos, check: { modo: check.modo, origem: check.origem } };
275
564
  thread.baseline = baseline;
276
565
  (0, thread_1.gravarThread)(raiz, thread);
277
566
  (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, threadId), threadId, ledger_1.TIPOS_DE_EVENTO.baselineGravada, {
278
567
  commit: baseline.commit,
279
568
  cwd,
280
- comandos: comandos.map((c) => ({ nome: c.nome, comando: c.comando, ok: c.ok, code: c.code })),
569
+ comandos: comandos.map((c) => ({ nome: c.nome, comando: c.comando, ok: c.ok, code: c.code, prazoMs: c.prazoMs ?? null,
570
+ ...(c.duracaoMs !== undefined ? { duracaoMs: c.duracaoMs } : {}), ...(c.ok ? {} : { causa: c.causa ?? null }) })),
571
+ check: checkNoLedger(check),
572
+ ...(pecasDaBaseline.length ? { agile: { pecas: pecasDaBaseline } } : {}),
573
+ // RM-037 (defeito 1 de 19 e 20/10/2026): o que a baseline nao provou fica dito no proprio evento.
574
+ semVeredito: comandos.filter((c) => vereditoDaBaseline(c) === 'sem-veredito').map((c) => c.nome),
281
575
  fonte: 'execucao real no HEAD, nao relatorio de fase',
282
576
  origem,
283
577
  });
@@ -344,10 +638,14 @@ function verificar(carregado, threadId, opcoes = {}) {
344
638
  }
345
639
  function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, filaPesada) {
346
640
  const { raiz, manifesto } = carregado;
641
+ const inicioDaRodada = Date.now();
347
642
  const thread = (0, thread_1.lerThread)(raiz, threadId);
348
643
  const cwd = cwdDaThread(raiz, thread);
644
+ exigirDependenciasDaWorktree(carregado, threadId, cwd, 'verify', conducao, opcoes.executor);
349
645
  const commit = commitReal(cwd);
350
646
  const dir = (0, thread_1.dirThread)(raiz, threadId);
647
+ // RM-072 (D1): o modo da rodada; a opcao vence o manifesto, que vence o padrao.
648
+ const check = (0, check_modo_1.resolverModo)(manifesto.check?.mode, opcoes.check);
351
649
  // I-43 (D4, viga b): os criterios de pronto da thread viram claims do nucleo ANTES
352
650
  // da reexecucao, para entrarem no MESMO veredito das demais alegacoes. Idempotente:
353
651
  // `ork verify` roda em toda fase, e uma claim por criterio por rodada viraria
@@ -357,21 +655,61 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
357
655
  const instabilidade = (0, instabilidade_1.lerRegistroDeInstabilidade)(cwd, opcoes.agoraMs);
358
656
  const leitor = opcoes.lerProcStat ?? steal_1.lerProcStat;
359
657
  const janelaDaRodada = (0, steal_1.abrirJanela)(leitor);
658
+ // RM-072 (D8): no Agile, as pecas contam o que rodaram num relatorio da rodada, lido no fim.
659
+ const agil = check.modo === 'agile';
660
+ const relatorio = agil ? new check_agil_1.RelatorioDoCheck() : null;
661
+ const ambienteDaRodada = { ...ambienteDoModo(check), ...relatorio?.ambiente() };
360
662
  // I-37 (D2, D3): o prazo de cada comando sai do manifesto carregado no inicio da rodada;
361
663
  // editar o manifesto no meio dela nao muda o teto de quem ainda vai rodar.
362
- const executor = executorSobConducao(executorComSteal(opcoes.executor
363
- ?? ((nome, comando, dirDeTrabalho) => executar(nome, comando, dirDeTrabalho, prazoDoComando(manifesto, nome))), leitor, (0, instabilidade_1.testesDeRelogioVigentes)(instabilidade)), manifesto, conducao);
664
+ const executor = executorSobConducao(executorDaRodada(manifesto, instabilidade, opcoes.executor, leitor, ambienteDaRodada), manifesto, conducao);
665
+ // RM-072 (A3 do CHECK): as claims recebem o modo, nunca o relatorio da rodada; o teste que roda a varredura dentro de uma
666
+ // claim gravaria pecas de fixture no relatorio do verify. O relatorio fica com o preparo e o grupo.
667
+ const executorDasClaims = relatorio
668
+ ? executorSobConducao(executorDaRodada(manifesto, instabilidade, opcoes.executor, leitor, ambienteDoModo(check)), manifesto, conducao)
669
+ : executor;
670
+ // RM-072 (S-b do CHECK 2): fora do preparo, so a varredura e as lanes recebem o relatorio.
671
+ const executorDosComandos = relatorio ? soAVarreduraEAsLanesComRelatorio(executor, executorDasClaims) : executor;
364
672
  // I-54 (D10): o preparo roda UMA vez, antes das claims. Ele nunca e condicao para uma claim
365
673
  // passar (cada uma roda o proprio comando inteiro); ele so deixa pronta a compilacao. A
366
674
  // identidade do produto e tomada logo depois dele e conferida no fim da rodada.
367
- const preparo = manifesto.verify.preparo ? (() => {
368
- const resultado = executor('preparo', manifesto.verify.preparo, cwd);
369
- return { resultado, identidade: identidadeDoProduto(cwd) };
370
- })() : null;
675
+ // RM-072 (D4): no Agile, o preparo do Agile primeiro, com o `verify.preparo` de fallback.
676
+ const pecas = [];
677
+ const preparo = agil
678
+ ? (() => {
679
+ const p = (0, check_agil_1.prepararNoAgile)(manifesto, cwd, executor);
680
+ pecas.push(...p.pecas);
681
+ return p.resultado ? { resultado: p.resultado, identidade: identidadeDoProduto(cwd) } : null;
682
+ })()
683
+ : manifesto.verify.preparo ? (() => {
684
+ const resultado = executor('preparo', manifesto.verify.preparo, cwd);
685
+ return { resultado, identidade: identidadeDoProduto(cwd) };
686
+ })() : null;
687
+ // RM-072 (A6 do CHECK): com executor injetado (MCP, testes), o ambiente da rodada nao chega aos comandos; o ledger diz.
688
+ if (agil && opcoes.executor)
689
+ pecas.push(check_agil_1.PECA_SEM_RELATORIO);
690
+ // RM-072 (D5): a guarda do produto, tomada no fim do preparo.
691
+ const vigente = agil
692
+ ? { guarda: guardaDoPreparo(manifesto, cwd, preparo?.resultado ?? null), preparo: preparo?.resultado ?? null }
693
+ : null;
694
+ // RM-072 (A1, S-a, S-d e S-h do CHECK): a claim que compilou de novo (o build no meio da cadeia) muda o produto sem mudar
695
+ // a arvore; o preparo roda de novo antes da claim seguinte que o reaproveitaria, ate MAXIMO_DE_PREPAROS_REFEITOS vezes,
696
+ // e uma vez antes do grupo, e a peca diz o que aconteceu.
697
+ const refazer = (quando) => {
698
+ pecas.push(...(0, check_agil_1.refazerPreparo)(manifesto, cwd, executor, vigente, (p) => guardaDoPreparo(manifesto, cwd, p), quando));
699
+ };
700
+ let preparosRefeitos = 0;
701
+ const refazerAntesDaClaim = (nome) => {
702
+ if (!vigente || preparosRefeitos >= check_agil_1.MAXIMO_DE_PREPAROS_REFEITOS)
703
+ return false;
704
+ preparosRefeitos++;
705
+ refazer(`antes da claim ${nome}`);
706
+ return true;
707
+ };
371
708
  // Claim retirada sai do gate: o historico guarda a alegacao e o motivo da retirada.
709
+ const executorDaClaim = vigente ? (0, check_agil_1.executorDaClaimNoAgile)(manifesto, executorDasClaims, vigente, refazerAntesDaClaim) : executorDasClaims;
372
710
  const claims = (0, claims_1.lerClaims)(raiz, threadId)
373
711
  .filter((c) => c.estado !== 'retirada')
374
- .map((c) => verificarClaim(c, cwd, executor));
712
+ .map((c) => verificarClaim(c, cwd, executorDaClaim));
375
713
  for (const r of claims) {
376
714
  // Estouro de prazo e comando que nao rodou nao julgam a alegacao: o estado anterior vale.
377
715
  if (r.motivo === 'verify.timeout' || r.motivo === 'verify.sem-veredito')
@@ -384,14 +722,30 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
384
722
  if (r.claim.estado !== estado)
385
723
  (0, claims_1.carimbarEstado)(raiz, r.claim, estado);
386
724
  }
725
+ // RM-072 (A1 do CHECK): o produto que mudou durante as claims tem o preparo refeito antes do grupo, que segue em paralelo.
726
+ // S-h do CHECK 3: o grupo tem a vaga dele, fora do teto das claims.
727
+ if (vigente && !opcoes.soClaims && vigente.guarda.conferir() === 'produto-mudou')
728
+ refazer('antes do grupo');
729
+ // RM-072 (D4, D6): no Agile, build do preparo e o resto no grupo paralelo, com a guarda valendo.
730
+ let doAgile = null;
387
731
  const comandos = opcoes.soClaims
388
732
  ? []
389
- : comandosDoManifesto(manifesto).map((c) => executor(c.nome, c.comando, cwd));
733
+ : vigente
734
+ ? (doAgile = (0, check_agil_1.comandosNoAgile)(manifesto, cwd, comandosDoManifesto(manifesto), executorDosComandos, executorDoGrupo(manifesto, ambienteDaRodada, instabilidade, leitor, conducao, opcoes.executor ? executor : undefined), vigente.guarda, vigente.preparo)).comandos
735
+ : comandosDoManifesto(manifesto).map((c) => executor(c.nome, c.comando, cwd));
736
+ if (doAgile)
737
+ pecas.push(...doAgile.pecas);
738
+ const resumoDoAgile = vigente ? agileNoLedger(raiz, threadId, commit, pecas, doAgile, vigente.guarda, relatorio, claims) : null;
739
+ // RM-062 (F2): a barreira de dado privado no diff da thread, so com a policy `dado_privado` no manifesto.
740
+ const dadoPrivado = (0, dado_privado_1.barreiraDaThread)(carregado, thread, cwd, 'verify');
741
+ const dadoPrivadoBloqueia = (0, policies_1.bloqueantes)(dadoPrivado?.violacoes ?? []);
390
742
  const baseline = thread.baseline ?? null;
391
743
  const regressoes = [];
392
744
  const preExistentes = [];
393
745
  const falhasSemBaseline = [];
394
746
  const estouros = [];
747
+ // RM-037 (defeito 1 de 19 e 20/10/2026): o comando sem veredito na baseline nao separa regressao de divida.
748
+ const baselineSemVeredito = (baseline?.comandos ?? []).filter((c) => vereditoDaBaseline(c) === 'sem-veredito').map((c) => c.nome);
395
749
  for (const atual of comandos) {
396
750
  if (atual.ok)
397
751
  continue;
@@ -400,7 +754,7 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
400
754
  continue;
401
755
  }
402
756
  const antes = baseline?.comandos.find((c) => c.nome === atual.nome);
403
- if (!antes)
757
+ if (!antes || vereditoDaBaseline(antes) === 'sem-veredito')
404
758
  falhasSemBaseline.push(atual);
405
759
  else if (antes.ok)
406
760
  regressoes.push(atual);
@@ -435,8 +789,11 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
435
789
  if (produtoAlterado || naoExecutados.length > 0 || claims.some((c) => c.motivo === 'verify.sem-veredito')) {
436
790
  motivos.push('verify.sem-veredito');
437
791
  }
792
+ if (dadoPrivadoBloqueia.length > 0)
793
+ motivos.push('policy.violation');
438
794
  const bloqueantes = motivos.filter((m) => m !== 'claims.unverifiable');
439
795
  const ok = bloqueantes.length === 0;
796
+ const duracaoMs = Date.now() - inicioDaRodada;
440
797
  (0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.verificacao, {
441
798
  commit,
442
799
  cwd,
@@ -447,6 +804,10 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
447
804
  verificado: c.verificado,
448
805
  motivo: c.motivo,
449
806
  detalhe: c.detalhe,
807
+ // RM-072 (D2): a soma da parede dos comandos da claim.
808
+ duracaoMs: c.execucoes.reduce((t, e) => t + (e.duracaoMs ?? 0), 0),
809
+ // RM-072 (D5): no Agile, o que a guarda fez com cada comando da claim.
810
+ ...(c.execucoes.some((e) => e.preparo) ? { preparo: c.execucoes.map((e) => e.preparo ?? null) } : {}),
450
811
  ...(falhou ? { execucao: comandoNoLedger(falhou) } : {}),
451
812
  };
452
813
  }),
@@ -455,6 +816,7 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
455
816
  regressoes: regressoes.map((r) => r.nome),
456
817
  preExistentes: preExistentes.map((r) => r.nome),
457
818
  falhasSemBaseline: falhasSemBaseline.map((r) => r.nome),
819
+ ...(baselineSemVeredito.length > 0 ? { baselineSemVeredito } : {}),
458
820
  estouros: estouros.map((r) => r.nome),
459
821
  prazoMs: manifesto.verify.timeout_ms ?? exports.TIMEOUT_VERIFY_MS,
460
822
  steal,
@@ -465,12 +827,24 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
465
827
  identidade: preparo.identidade.slice(0, 16), identidadeFinal: identidadeFinal.slice(0, 16), produtoAlterado } } : {}),
466
828
  motivos,
467
829
  veredito: ok ? 'verdade sustentada' : 'reprovado',
830
+ // RM-072 (D1, D2): o modo do CHECK e de onde ele veio, e a parede da rodada inteira.
831
+ check: checkNoLedger(check),
832
+ duracaoMs,
833
+ // RM-072 (D8): no Agile, as pecas, o grupo, o reaproveitamento e as listas das lanes.
834
+ ...(resumoDoAgile ? { agile: resumoDoAgile } : {}),
468
835
  // I-36: por qual canal a verificacao chegou; a reentrada da sessao que conduz aparece aqui.
469
836
  canal,
470
837
  conducao: { identidade: conducao.identidade, reentrada: conducao.reentrada },
471
838
  // RM-058 N2: se a rodada esperou a vez na fila pesada, e quanto.
472
839
  filaPesada,
840
+ // RM-062 (F2): contagens, padroes e onde; nunca o valor casado nem o termo da lista local.
841
+ ...(dadoPrivado ? { dadoPrivado: (0, dado_privado_1.resumoNoLedger)(dadoPrivado) } : {}),
473
842
  });
843
+ // RM-062 (F2): em `warn`, a barreira registra e segue, como toda policy de aviso.
844
+ for (const v of (0, policies_1.avisos)(dadoPrivado?.violacoes ?? [])) {
845
+ (0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.politicaAviso, { gate: 'verify', policy: v.policy, motivo: v.motivo,
846
+ detalhe: v.detalhe, correcao: v.correcao, modo: thread.modo });
847
+ }
474
848
  for (const motivo of bloqueantes) {
475
849
  (0, gates_1.registrarGateBloqueado)(dir, threadId, {
476
850
  gate: 'verify',
@@ -493,7 +867,13 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
493
867
  ...naoExecutados.map((c) => `${c.nome} nao foi executado`),
494
868
  ...claims.filter((c) => c.motivo === 'verify.sem-veredito').map((c) => `${c.claim.id}: ${c.detalhe}`)]
495
869
  .filter(Boolean).join('; ')
496
- : `falha sem baseline em: ${falhasSemBaseline.map((r) => r.nome).join(', ')}`,
870
+ : motivo === 'policy.violation'
871
+ ? dadoPrivadoBloqueia.map((v) => `policy ${v.policy}: ${v.detalhe}`).join('; ')
872
+ : `falha sem baseline em: ${falhasSemBaseline.map((r) => r.nome).join(', ')}` + (falhasSemBaseline
873
+ .some((r) => baselineSemVeredito.includes(r.nome))
874
+ ? `; a baseline nao teve veredito de ${falhasSemBaseline.filter((r) => baselineSemVeredito.includes(r.nome))
875
+ .map((r) => r.nome).join(', ')} (estouro do prazo, sinal, relogio sob steal, comando que nao rodou ou sem ` +
876
+ 'codigo de saida do proprio comando)' : ''),
497
877
  evidencia: `reexecucao no HEAD ${commit} em ${cwd}`,
498
878
  correcao: motivo === 'claims.failed'
499
879
  ? 'corrija o artefato ou a alegacao e rode `ork verify` de novo'
@@ -501,9 +881,13 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
501
881
  ? 'rode `ork verify` de novo; se estourar sempre, suba verify.timeout_ms no manifesto ou divida o comando'
502
882
  : motivo === 'verify.sem-veredito'
503
883
  ? 'rode `ork verify` de novo, sem editar a worktree durante a rodada'
504
- : 'corrija a regressao, ou grave a baseline antes do GO com `ork verify <thread> --baseline`',
884
+ : motivo === 'policy.violation'
885
+ ? dadoPrivadoBloqueia.map((v) => v.correcao).join('; ')
886
+ : 'corrija a regressao, ou grave a baseline antes do GO com `ork verify <thread> --baseline`',
505
887
  });
506
888
  }
889
+ // RM-072 (D17): o ultimo modo do CHECK fica na thread, para o status mostrar.
890
+ registrarModoNaThread(raiz, threadId, check, commit);
507
891
  return {
508
892
  thread: threadId,
509
893
  commit,
@@ -519,10 +903,23 @@ function verificarSobConducao(carregado, threadId, opcoes, conducao, canal, fila
519
903
  steal,
520
904
  instabilidade,
521
905
  filaPesada,
906
+ dadoPrivado,
907
+ check,
908
+ duracaoMs,
909
+ agile: resumoDoAgile,
522
910
  motivos,
523
911
  ok,
524
912
  };
525
913
  }
914
+ /**
915
+ * RM-072 (D17): grava o modo do ultimo `verify_run` no `thread.json`. A thread e relida na hora, para nao devolver ao
916
+ * disco uma copia lida no comeco da rodada; o status mostra a linha so quando o campo existe.
917
+ */
918
+ function registrarModoNaThread(raiz, threadId, check, commit) {
919
+ const atual = (0, thread_1.lerThread)(raiz, threadId);
920
+ atual.check = { modo: check.modo, origem: check.origem, commit, em: (0, util_1.agora)() };
921
+ (0, thread_1.gravarThread)(raiz, atual);
922
+ }
526
923
  /** `FALHOU (codigo 1)`, ou `ESTOUROU O PRAZO (600 s, rodou 612 s)`: a causa e dita pelo nome. */
527
924
  function situacaoDoComando(c) {
528
925
  const m = (0, locale_1.msg)().verify;
@@ -537,6 +934,21 @@ function situacaoDoComando(c) {
537
934
  return m.mortoPorSinal(c.code);
538
935
  return m.falhou(c.code);
539
936
  }
937
+ /**
938
+ * RM-037 (defeito 1 de 19 e 20/10/2026): as linhas de cada comando de `ork verify --baseline`, com o veredito dele, e a
939
+ * linha que diz o que a baseline nao provou e como regravar.
940
+ */
941
+ function linhasDaBaseline(b, id) {
942
+ const m = (0, locale_1.msg)().verify;
943
+ const linhas = b.comandos.map((c) => m.baselineComando(c.nome, vereditoDaBaseline(c), c.code, c.comando, situacaoDoComando(c)));
944
+ // RM-072 (D1): o modo que gravou a baseline (a baseline anterior a RM-072 nao tem o campo).
945
+ if (b.check)
946
+ linhas.unshift(m.baselineCheck(check_modo_1.NOME_DO_MODO[b.check.modo], b.check.modo, b.check.origem));
947
+ const semVeredito = b.comandos.filter((c) => vereditoDaBaseline(c) === 'sem-veredito').map((c) => c.nome);
948
+ if (semVeredito.length > 0)
949
+ linhas.push(m.baselineSemVeredito(semVeredito.join(', '), id));
950
+ return linhas;
951
+ }
540
952
  /** Texto de `ork verify`. O detalhe da claim veio do catalogo em pt-BR e sai remontado no locale ativo. */
541
953
  function textoDoVerify(r) {
542
954
  const m = (0, locale_1.msg)().verify;
@@ -544,6 +956,14 @@ function textoDoVerify(r) {
544
956
  linhas.push(m.titulo(r.thread));
545
957
  linhas.push(m.head(r.commit));
546
958
  linhas.push(m.diretorio(r.cwd));
959
+ linhas.push(m.check(r.check.nome, r.check.modo, r.check.origem));
960
+ // RM-072 (D8): no Agile, o reaproveitamento, o grupo e as pecas em fallback, quando ha o que dizer.
961
+ const a = r.agile;
962
+ if (a && (a.claims.reaproveitadas + a.claims.inteiras > 0 || a.grupo.paralelo)) {
963
+ linhas.push(m.agile(a.claims.reaproveitadas, a.claims.inteiras, a.grupo.paralelo, a.grupo.lanes));
964
+ }
965
+ for (const p of a?.pecas.filter((x) => x.estado === 'fallback') ?? [])
966
+ linhas.push(m.agileFallback(p.peca, p.motivo ?? '', p.fallback ?? ''));
547
967
  linhas.push(r.baseline ? m.baseline((0, util_1.shaCurto)(r.baseline.commit), (0, horario_1.formatarDataHoraRotulada)(r.baseline.gravadaEm)) : m.semBaseline);
548
968
  if (r.preparo) {
549
969
  const p = r.preparo;
@@ -588,10 +1008,33 @@ function textoDoVerify(r) {
588
1008
  linhas.push(m.regressao(c.nome, c.comando));
589
1009
  for (const c of r.preExistentes)
590
1010
  linhas.push(m.preExistente(c.nome, c.comando));
591
- for (const c of r.falhasSemBaseline)
592
- linhas.push(m.falhaSemBaseline(c.nome, c.comando));
1011
+ // RM-037 (defeito 1 de 19 e 20/10/2026): a baseline existe, mas nao teve veredito deste comando.
1012
+ const semVeredito = new Set((r.baseline?.comandos ?? []).filter((c) => vereditoDaBaseline(c) === 'sem-veredito').map((c) => c.nome));
1013
+ for (const c of r.falhasSemBaseline) {
1014
+ linhas.push(semVeredito.has(c.nome) ? m.falhaComBaselineSemVeredito(c.nome, c.comando) : m.falhaSemBaseline(c.nome, c.comando));
1015
+ }
593
1016
  }
1017
+ if (r.dadoPrivado)
1018
+ linhas.push('', ...textoDaBarreira(r.dadoPrivado));
594
1019
  linhas.push('');
595
1020
  linhas.push(r.ok ? m.verdade : m.reprovado(r.motivos.join(', ')));
596
1021
  return linhas.join('\n');
597
1022
  }
1023
+ /** RM-062 (F2): a secao da barreira de dado privado, sem valor casado nem termo; ate 20 achados. */
1024
+ function textoDaBarreira(b) {
1025
+ const m = (0, locale_1.msg)().verify;
1026
+ const v = b.varredura;
1027
+ const escopo = v.escopo.map((e) => e.tipo === 'diff' ? m.dadoPrivadoEscopoDiff(e.base.slice(0, 12), e.ref)
1028
+ : e.tipo === 'arvore' ? m.dadoPrivadoEscopoArvore : m.dadoPrivadoEscopoTexto(e.nome)).join(' + ');
1029
+ const linhas = [m.dadoPrivadoTitulo(b.severidade), m.dadoPrivadoEscopo(escopo, v.arquivos, v.linhas, v.nomes),
1030
+ v.listaLocal.presente ? m.dadoPrivadoListaPresente(v.listaLocal.termos, v.listaLocal.lidos.join(', '))
1031
+ : m.dadoPrivadoListaAusente(v.listaLocal.procurada.join(', '))];
1032
+ if (v.erro)
1033
+ return [...linhas, m.dadoPrivadoErro(v.erro)];
1034
+ linhas.push(m.dadoPrivadoAchados(v.achados.length));
1035
+ for (const a of v.achados.slice(0, 20))
1036
+ linhas.push(m.dadoPrivadoAchado(a.arquivo, a.linha, a.coluna, a.padrao, a.termo));
1037
+ if (v.achados.length > 20)
1038
+ linhas.push(m.dadoPrivadoMais(v.achados.length - 20));
1039
+ return linhas;
1040
+ }