@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.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/ship.js
CHANGED
|
@@ -50,6 +50,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
50
50
|
};
|
|
51
51
|
})();
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.MODOS_QUE_AUTORIZAM_PUSH = void 0;
|
|
53
54
|
exports.commitQueIncorporou = commitQueIncorporou;
|
|
54
55
|
exports.autorizacaoDePush = autorizacaoDePush;
|
|
55
56
|
exports.arvoreComBranch = arvoreComBranch;
|
|
@@ -58,6 +59,7 @@ exports.shaDaRef = shaDaRef;
|
|
|
58
59
|
exports.shaNoRemoto = shaNoRemoto;
|
|
59
60
|
exports.remotoConfigurado = remotoConfigurado;
|
|
60
61
|
exports.detectarReversaoDaEntrega = detectarReversaoDaEntrega;
|
|
62
|
+
exports.unscannedCategories = unscannedCategories;
|
|
61
63
|
exports.registrarReversaoDaEntrega = registrarReversaoDaEntrega;
|
|
62
64
|
exports.ship = ship;
|
|
63
65
|
exports.textoDoShip = textoDoShip;
|
|
@@ -70,15 +72,22 @@ const ledger_1 = require("./ledger");
|
|
|
70
72
|
const manifest_1 = require("./manifest");
|
|
71
73
|
const modos_1 = require("./modos");
|
|
72
74
|
const policies_1 = require("./policies");
|
|
75
|
+
const estado_thread_1 = require("./estado-thread");
|
|
76
|
+
const report_1 = require("./security-scan/report");
|
|
77
|
+
const types_1 = require("./security-scan/types");
|
|
73
78
|
const thread_1 = require("./thread");
|
|
74
79
|
const util_1 = require("./util");
|
|
75
80
|
const verify_1 = require("./verify");
|
|
76
81
|
const ci_1 = require("./ci");
|
|
82
|
+
const forja_1 = require("./forja");
|
|
77
83
|
const contrato_publico_1 = require("./contrato-publico");
|
|
78
84
|
const prova_minima_1 = require("./prova-minima");
|
|
79
85
|
const horario_1 = require("./horario");
|
|
80
86
|
const fabrica_publicar_1 = require("./fabrica-publicar");
|
|
87
|
+
const mcp_ship_transporte_1 = require("./mcp-ship-transporte");
|
|
81
88
|
const branch_de_estado_1 = require("./branch-de-estado");
|
|
89
|
+
const locale_1 = require("./locale");
|
|
90
|
+
const noctum_guarda_1 = require("./noctum-guarda");
|
|
82
91
|
/**
|
|
83
92
|
* RM-037 (fatia 5, A1): o commit de primeiro pai da base que incorporou o `shaDe`: o merge que trouxe a branch, ou
|
|
84
93
|
* o proprio `shaDe` quando a base avancou por fast-forward ate ele. Com a branch ja incorporada, a ponta da base e
|
|
@@ -125,8 +134,8 @@ function contratosDaEntrega(raiz, shaPara, shaDe) {
|
|
|
125
134
|
const diff = (0, util_1.exec)('git', ['diff', '--name-only', '--no-renames', base.stdout.trim(), shaDe], raiz);
|
|
126
135
|
return diff.ok ? (0, contrato_publico_1.contratosTocados)(diff.stdout.split('\n').map((l) => l.trim()).filter(Boolean)) : [];
|
|
127
136
|
}
|
|
128
|
-
/** Modos em que a propria #TAG do pedido autoriza o push antecipadamente. */
|
|
129
|
-
|
|
137
|
+
/** Modos em que a propria #TAG do pedido autoriza o push antecipadamente (o `ork ship publicar` usa a mesma lista). */
|
|
138
|
+
exports.MODOS_QUE_AUTORIZAM_PUSH = ['maestro', 'auto'];
|
|
130
139
|
/**
|
|
131
140
|
* Quem autoriza o push desta thread.
|
|
132
141
|
*
|
|
@@ -145,15 +154,15 @@ function autorizacaoDePush(raiz, thread, opcoes) {
|
|
|
145
154
|
autorizado: true,
|
|
146
155
|
tipo: 'humano-no-cli',
|
|
147
156
|
por: opcoes.autorizarPush.trim(),
|
|
148
|
-
razao:
|
|
157
|
+
razao: (0, locale_1.textoDoCatalogo)((m) => m.ship.autorizadoNaLinha(tag)),
|
|
149
158
|
};
|
|
150
159
|
}
|
|
151
|
-
if (MODOS_QUE_AUTORIZAM_PUSH.includes(thread.modo)) {
|
|
160
|
+
if (exports.MODOS_QUE_AUTORIZAM_PUSH.includes(thread.modo)) {
|
|
152
161
|
return {
|
|
153
162
|
autorizado: true,
|
|
154
163
|
tipo: 'modo',
|
|
155
|
-
por:
|
|
156
|
-
razao:
|
|
164
|
+
por: (0, locale_1.textoDoCatalogo)((m) => m.ship.porTag(tag)),
|
|
165
|
+
razao: (0, locale_1.textoDoCatalogo)((m) => m.ship.autorizadoPeloModo(tag)),
|
|
157
166
|
};
|
|
158
167
|
}
|
|
159
168
|
if (thread.modo === 'classic') {
|
|
@@ -162,8 +171,9 @@ function autorizacaoDePush(raiz, thread, opcoes) {
|
|
|
162
171
|
return {
|
|
163
172
|
autorizado: true,
|
|
164
173
|
tipo: 'humano-antecipado',
|
|
165
|
-
por: String(antecipada.autorizadoPor
|
|
166
|
-
|
|
174
|
+
por: antecipada.autorizadoPor !== undefined && antecipada.autorizadoPor !== null ? String(antecipada.autorizadoPor)
|
|
175
|
+
: (0, locale_1.textoDoCatalogo)((m) => m.ship.humano),
|
|
176
|
+
razao: (0, locale_1.textoDoCatalogo)((m) => m.ship.autorizadoAntes(String(antecipada.ts))),
|
|
167
177
|
};
|
|
168
178
|
}
|
|
169
179
|
}
|
|
@@ -171,8 +181,7 @@ function autorizacaoDePush(raiz, thread, opcoes) {
|
|
|
171
181
|
autorizado: false,
|
|
172
182
|
tipo: 'pendente',
|
|
173
183
|
por: '',
|
|
174
|
-
razao:
|
|
175
|
-
`Autorize na entrega: ork ship ${thread.id} --para <branch> --autorizar-push <quem>`,
|
|
184
|
+
razao: (0, locale_1.textoDoCatalogo)((m) => m.ship.semAutorizacao(tag, thread.id)),
|
|
176
185
|
};
|
|
177
186
|
}
|
|
178
187
|
/** Diretorio temporario onde a arvore de merge e montada quando preciso. */
|
|
@@ -219,8 +228,7 @@ function prepararArvore(raiz, para) {
|
|
|
219
228
|
const dona = arvoreComBranch(raiz, para);
|
|
220
229
|
if (dona) {
|
|
221
230
|
if (temAlteracaoNaoCommitada(dona)) {
|
|
222
|
-
throw new
|
|
223
|
-
'commite ou reverta la antes do ship');
|
|
231
|
+
throw new locale_1.ErroDoCatalogo((m) => m.ship.arvoreSuja(para, dona));
|
|
224
232
|
}
|
|
225
233
|
return { dir: dona, temporaria: false };
|
|
226
234
|
}
|
|
@@ -228,17 +236,23 @@ function prepararArvore(raiz, para) {
|
|
|
228
236
|
fs.mkdirSync(path.dirname(dir), { recursive: true });
|
|
229
237
|
const r = (0, util_1.exec)('git', ['worktree', 'add', '--', dir, para], raiz);
|
|
230
238
|
if (!r.ok) {
|
|
231
|
-
|
|
239
|
+
const erro = (r.stderr || r.stdout).trim();
|
|
240
|
+
throw new locale_1.ErroDoCatalogo((m) => m.ship.arvoreNaoMontada(para, erro));
|
|
232
241
|
}
|
|
233
242
|
return { dir, temporaria: true };
|
|
234
243
|
}
|
|
235
244
|
/** Remove a worktree temporaria do merge (best effort: o lease ja foi liberado). */
|
|
236
|
-
function descartarArvore(raiz, arvore) {
|
|
245
|
+
function descartarArvore(raiz, arvore, trava = []) {
|
|
237
246
|
if (!arvore.temporaria)
|
|
238
247
|
return;
|
|
239
|
-
(0, util_1.exec)('git', ['worktree', 'remove', '--force', arvore.dir], raiz);
|
|
240
|
-
(0, util_1.exec)('git', ['worktree', 'prune'], raiz);
|
|
248
|
+
(0, util_1.exec)('git', [...trava, 'worktree', 'remove', '--force', arvore.dir], raiz);
|
|
249
|
+
(0, util_1.exec)('git', [...trava, 'worktree', 'prune'], raiz);
|
|
241
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* O git local que o transporte fixado roda no projeto depois da ultima conferencia: nenhum hook (o
|
|
253
|
+
* `reference-transaction` do `update-ref`, inclusive) e nenhum fsmonitor, que o agente pode ter posto ali durante o push.
|
|
254
|
+
*/
|
|
255
|
+
const TRAVA_LOCAL_DO_FIXADO = ['-c', 'core.hooksPath=/dev/null', '-c', 'core.fsmonitor='];
|
|
242
256
|
/** sha de uma referencia local, ou null quando ela nao existe. */
|
|
243
257
|
function shaDaRef(dir, ref) {
|
|
244
258
|
const r = (0, util_1.exec)('git', ['rev-parse', '--verify', '--quiet', ref], dir);
|
|
@@ -251,17 +265,49 @@ function shaDaRef(dir, ref) {
|
|
|
251
265
|
* E o unico jeito aceito de provar push nesta maquina: `gh api` e imprevisivel aqui, e o
|
|
252
266
|
* codigo de saida do `git push` nao prova que o remoto ficou com o commit certo.
|
|
253
267
|
*/
|
|
254
|
-
function shaNoRemoto(dir, remoto, branch) {
|
|
268
|
+
function shaNoRemoto(dir, remoto, branch, config = []) {
|
|
255
269
|
// RM-047: so nome de remoto chega ao git, e depois do `--` (nunca vira opcao nem transporte).
|
|
256
|
-
const r = (0, util_1.exec)('git', ['ls-remote', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship'), `refs/heads/${branch}`], dir, 120000);
|
|
270
|
+
const r = (0, util_1.exec)('git', [...configDoRemotoValida(config), 'ls-remote', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship'), `refs/heads/${branch}`], dir, 120000);
|
|
271
|
+
return shaDoLsRemote(r, branch);
|
|
272
|
+
}
|
|
273
|
+
function validarUrlFixada(url, config) {
|
|
274
|
+
const protocolo = (0, mcp_ship_transporte_1.protocoloDaConfigDeRede)(config);
|
|
275
|
+
const recusa = () => { throw new locale_1.ErroDoCatalogo((m) => m.ship.configDoRemotoInvalida('urlFixada')); };
|
|
276
|
+
if (!protocolo || typeof url !== 'string' || /[\x00-\x20\x7f]/.test(url) || url.startsWith('-'))
|
|
277
|
+
return recusa();
|
|
278
|
+
try {
|
|
279
|
+
const e = (0, mcp_ship_transporte_1.enderecoDoOrigin)(protocolo === 'ssh' ? 'forja-ssh' : 'forja-https', url);
|
|
280
|
+
if (e.transporte === 'forja-https' && (0, mcp_ship_transporte_1.urlDaConfigDeRede)(config) !== url)
|
|
281
|
+
return recusa();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return recusa();
|
|
285
|
+
}
|
|
286
|
+
return { url, protocolo };
|
|
287
|
+
}
|
|
288
|
+
/** O git que vai a rede no transporte fixado: do gitdir privado, so com o protocolo do modo. */
|
|
289
|
+
function gitDoRemotoFixado(f, args, timeoutMs) {
|
|
290
|
+
return (0, util_1.exec)('git', [`--git-dir=${f.gitdir}`, ...f.config, ...args], f.gitdir, timeoutMs, { ...process.env, GIT_ALLOW_PROTOCOL: f.protocolo });
|
|
291
|
+
}
|
|
292
|
+
function shaNoRemotoFixado(f, branch) {
|
|
293
|
+
return shaDoLsRemote(gitDoRemotoFixado(f, ['ls-remote', '--', f.url, `refs/heads/${branch}`], 120000), branch);
|
|
294
|
+
}
|
|
295
|
+
function shaDoLsRemote(r, branch) {
|
|
257
296
|
if (!r.ok)
|
|
258
297
|
return null;
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const sha = linha.split(/\s+/)[0];
|
|
298
|
+
// RM-059 (S1 da revisao da ork-rm059pista): o padrao do ls-remote casa por sufixo; vale so a linha da ref exata.
|
|
299
|
+
const linha = r.stdout.split('\n').map((l) => l.trim().split(/\s+/)).find((partes) => partes[1] === `refs/heads/${branch}`);
|
|
300
|
+
const sha = linha?.[0] ?? '';
|
|
263
301
|
return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
|
|
264
302
|
}
|
|
303
|
+
/** So a lista que `configDeRede` emite, chave e valor: nenhuma outra opcao, chave ou valor chega antes do subcomando de rede. */
|
|
304
|
+
function configDoRemotoValida(config) {
|
|
305
|
+
const recusada = (0, mcp_ship_transporte_1.chaveRecusadaDaConfigDeRede)(config);
|
|
306
|
+
// Nunca ecoa o valor: so a chave (ate 80 caracteres) mostra o que foi recusado.
|
|
307
|
+
if (recusada !== null)
|
|
308
|
+
throw new locale_1.ErroDoCatalogo((m) => m.ship.configDoRemotoInvalida(recusada.slice(0, 80)));
|
|
309
|
+
return config;
|
|
310
|
+
}
|
|
265
311
|
/** O remoto esta configurado neste repositorio? */
|
|
266
312
|
function remotoConfigurado(dir, remoto) {
|
|
267
313
|
return (0, util_1.exec)('git', ['remote', 'get-url', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship')], dir).ok;
|
|
@@ -320,7 +366,9 @@ function detectarReversaoDaEntrega(raiz, thread, para) {
|
|
|
320
366
|
const entregas = (0, ledger_1.lerLedger)(dir)
|
|
321
367
|
.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.shipConcluido && typeof e.mergeSha === 'string')
|
|
322
368
|
.map((e) => ({ mergeSha: String(e.mergeSha), para: para ?? String(e.para ?? '') }))
|
|
323
|
-
|
|
369
|
+
// RM-047 (fronteira de confiança): o ledger pode vir do clone. Só sha hexadecimal e nome de branch
|
|
370
|
+
// chegam ao `git log`; qualquer outro valor viraria opção dele e é ignorado.
|
|
371
|
+
.filter((e) => e.para.length > 0 && (0, branch_de_estado_1.shaValido)(e.mergeSha) && (0, branch_de_estado_1.branchValida)(e.para));
|
|
324
372
|
if (entregas.length === 0)
|
|
325
373
|
return null;
|
|
326
374
|
const perguntados = new Set();
|
|
@@ -330,7 +378,7 @@ function detectarReversaoDaEntrega(raiz, thread, para) {
|
|
|
330
378
|
continue;
|
|
331
379
|
perguntados.add(intervalo);
|
|
332
380
|
// O historico e append-only: o merge continua la, e o revert vem DEPOIS dele.
|
|
333
|
-
const log = (0, util_1.exec)('git', ['log', '--format=%H%x1f%B%x1e', intervalo], raiz, 60000);
|
|
381
|
+
const log = (0, util_1.exec)('git', ['log', '--format=%H%x1f%B%x1e', '--end-of-options', intervalo], raiz, 60000);
|
|
334
382
|
if (!log.ok)
|
|
335
383
|
continue;
|
|
336
384
|
for (const bruto of log.stdout.split('\x1e')) {
|
|
@@ -344,6 +392,23 @@ function detectarReversaoDaEntrega(raiz, thread, para) {
|
|
|
344
392
|
}
|
|
345
393
|
return null;
|
|
346
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Loop categories (secret, dependency, sast, iac, workflow) not scanned for `sha` (spec 11.2): `[]` without
|
|
397
|
+
* `verify.security_scan` and with `ci.required_for_ship` (the scan is then in the CI bundle, which the independent CI
|
|
398
|
+
* check covers). Otherwise the report of `sha` decides: a loop tool `unavailable` or `failed` leaves its category
|
|
399
|
+
* unscanned (the spec says `unavailable`; a `failed` loop tool is equally not scanned, never clean), except the
|
|
400
|
+
* "nothing to scan" reasons excused by `isExcusedUnscanned` (same rule as the exit code), and no report at all leaves
|
|
401
|
+
* every loop category unscanned (no evidence is not clean). Sorted, distinct.
|
|
402
|
+
*/
|
|
403
|
+
function unscannedCategories(carregado, sha) {
|
|
404
|
+
if (carregado.manifesto.verify.security_scan === undefined || carregado.manifesto.ci.required_for_ship)
|
|
405
|
+
return [];
|
|
406
|
+
const report = (0, report_1.readReport)((0, estado_thread_1.raizDoEstado)(carregado.raiz), sha);
|
|
407
|
+
if (!report)
|
|
408
|
+
return [...types_1.LOOP_CATEGORIES].sort();
|
|
409
|
+
const missing = (0, report_1.unscannedLoopTools)(report).map(t => t.category);
|
|
410
|
+
return [...new Set(missing)].sort();
|
|
411
|
+
}
|
|
347
412
|
/**
|
|
348
413
|
* Grava `rollback_done` quando a reversao e nova, e devolve o que encontrou.
|
|
349
414
|
*
|
|
@@ -376,7 +441,20 @@ function ship(carregado, threadId, opcoes) {
|
|
|
376
441
|
// so nome de remoto passa; o resto recusa com `ship.remoto-invalido`, e o ship nao entrega sem push provado
|
|
377
442
|
// por um remoto que nunca existiu.
|
|
378
443
|
const remoto = (0, branch_de_estado_1.exigirRemoto)(opcoes.remoto ?? 'origin', 'ship');
|
|
444
|
+
const configDoRemoto = configDoRemotoValida(opcoes.configDoRemoto ?? []);
|
|
445
|
+
const comConfig = (args) => `git ${[...configDoRemoto, ...args].join(' ')}`;
|
|
446
|
+
const urlFixada = opcoes.urlFixada === undefined ? null : validarUrlFixada(opcoes.urlFixada, configDoRemoto);
|
|
447
|
+
// Nos passos, o gitdir privado e a URL fixada vao por nome: o caminho temporario nao diz nada a quem le.
|
|
379
448
|
const r = baseDoResultado(thread, de, opcoes);
|
|
449
|
+
// RM-058, integracao (T1.1, D3 da ork-rm058integra): a thread de um arco #Noctum que a guarda e entregue pelo passo da
|
|
450
|
+
// entrega do arco, nunca por aqui (nem pelo `ork_ship` do MCP, que chama este mesmo ship). A recusa vem antes de qualquer
|
|
451
|
+
// git e nao vai ao ledger da thread: um `ship_blocked` ou um gate por uma tentativa de fora pesaria no indice da thread e
|
|
452
|
+
// apareceria como pausa do dono na fila do arco.
|
|
453
|
+
const guarda = (0, noctum_guarda_1.guardaDaThread)(raiz, threadId);
|
|
454
|
+
if (guarda) {
|
|
455
|
+
return { ...r, autorizacao: autorizacaoDePush(raiz, thread, opcoes), bloqueado: true, ok: false, motivo: 'policy.violation',
|
|
456
|
+
codigo: guarda.motivo, detalhe: guarda.detalhe, correcao: guarda.correcao };
|
|
457
|
+
}
|
|
380
458
|
// I-43 (T7): antes de qualquer coisa, se a entrega ANTERIOR desta thread foi
|
|
381
459
|
// revertida na base, isso vira `rollback_done`. E o insumo de maior peso do indice
|
|
382
460
|
// de qualidade, e o unico fato que diz sem interpretacao que a entrega nao servia.
|
|
@@ -385,7 +463,18 @@ function ship(carregado, threadId, opcoes) {
|
|
|
385
463
|
registrarReversaoDaEntrega(raiz, thread, para);
|
|
386
464
|
}
|
|
387
465
|
catch { /* git indisponivel nao barra o ship */ }
|
|
388
|
-
|
|
466
|
+
// O push pode ter saido: a troca do origin ou da config durante ele bloqueia o gate no ledger e sobe tipada.
|
|
467
|
+
const conferirDepoisDoPush = (passos) => {
|
|
468
|
+
try {
|
|
469
|
+
opcoes.conferirDepoisDoPush?.();
|
|
470
|
+
}
|
|
471
|
+
catch (e) {
|
|
472
|
+
r.passos = passos;
|
|
473
|
+
bloquear('runtime.unavailable', e instanceof locale_1.ErroDoCatalogo ? (0, locale_1.textoDoCatalogo)(e.montar) : e.message, (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProvaCorrecao), 'transport.mudou-no-push');
|
|
474
|
+
throw e;
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
const bloquear = (motivo, detalhe, correcao, codigo) => {
|
|
389
478
|
(0, gates_1.registrarGateBloqueado)(dir, threadId, {
|
|
390
479
|
gate: 'ship',
|
|
391
480
|
motivo,
|
|
@@ -401,18 +490,19 @@ function ship(carregado, threadId, opcoes) {
|
|
|
401
490
|
de,
|
|
402
491
|
para,
|
|
403
492
|
motivo,
|
|
493
|
+
...(codigo ? { codigo } : {}),
|
|
404
494
|
detalhe,
|
|
405
495
|
correcao,
|
|
406
496
|
modo: thread.modo,
|
|
407
497
|
dryRun: r.dryRun,
|
|
408
498
|
});
|
|
409
|
-
return { ...r, bloqueado: true, ok: false, motivo, detalhe, correcao };
|
|
499
|
+
return { ...r, bloqueado: true, ok: false, motivo, detalhe, correcao, ...(codigo ? { codigo } : {}) };
|
|
410
500
|
};
|
|
411
501
|
// 1. Autorizacao de push pelo gate do modo de conducao.
|
|
412
502
|
const autorizacao = autorizacaoDePush(raiz, thread, opcoes);
|
|
413
503
|
r.autorizacao = autorizacao;
|
|
414
504
|
if (!autorizacao.autorizado) {
|
|
415
|
-
return bloquear('human.pending', autorizacao.razao,
|
|
505
|
+
return bloquear('human.pending', autorizacao.razao, (0, locale_1.textoDoCatalogo)((m) => m.ship.autorizeNaEntrega(threadId)));
|
|
416
506
|
}
|
|
417
507
|
// 2. Policies do manifesto que valem no gate `ship`. RM-008 (fatia 3): a branch da thread
|
|
418
508
|
// atras da base e fato do git, calculado aqui (a ponta da base nao esta contida na branch).
|
|
@@ -463,20 +553,21 @@ function ship(carregado, threadId, opcoes) {
|
|
|
463
553
|
return bloquear('policy.violation', bloqueiam.map((v) => `${v.policy}: ${v.detalhe}`).join('; '), bloqueiam.map((v) => v.correcao).join('; '));
|
|
464
554
|
}
|
|
465
555
|
// 3. Verificacao independente: reexecuta claims e comandos no HEAD real da thread.
|
|
466
|
-
const verificacao = (0, verify_1.verificar)(carregado, threadId, { executor: opcoes.executorVerify
|
|
556
|
+
const verificacao = (0, verify_1.verificar)(carregado, threadId, { executor: opcoes.executorVerify,
|
|
557
|
+
conducao: { filaPesada: { ...opcoes.avisoDaFilaPesada, esperarMs: opcoes.esperarFilaPesadaMs } } });
|
|
467
558
|
r.verificacao = verificacao;
|
|
468
559
|
if (!verificacao.ok) {
|
|
469
560
|
const motivo = verificacao.motivos.find((m) => m !== 'claims.unverifiable');
|
|
470
|
-
return bloquear(motivo,
|
|
561
|
+
return bloquear(motivo, (0, locale_1.textoDoCatalogo)((m) => m.ship.verificacaoReprovou(verificacao.commit, verificacao.motivos.join(', '))), (0, locale_1.textoDoCatalogo)((m) => m.ship.rodeVerify(threadId)));
|
|
471
562
|
}
|
|
472
563
|
// Referencias locais, resolvidas antes de tomar o lease.
|
|
473
564
|
const shaDe = shaDaRef(raiz, `refs/heads/${de}`);
|
|
474
565
|
const shaPara = shaDaRef(raiz, `refs/heads/${para}`);
|
|
475
566
|
if (!shaDe) {
|
|
476
|
-
return bloquear('artifact.missing',
|
|
567
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.origemAusente(de)), (0, locale_1.textoDoCatalogo)((m) => m.ship.origemAusenteCorrecao));
|
|
477
568
|
}
|
|
478
569
|
if (!shaPara) {
|
|
479
|
-
return bloquear('artifact.missing',
|
|
570
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.destinoAusente(para)), (0, locale_1.textoDoCatalogo)((m) => m.ship.destinoAusenteCorrecao));
|
|
480
571
|
}
|
|
481
572
|
r.shaDe = shaDe;
|
|
482
573
|
r.shaParaAntes = shaPara;
|
|
@@ -484,14 +575,29 @@ function ship(carregado, threadId, opcoes) {
|
|
|
484
575
|
// por git direto. Ciclo sem PLAN nem CHECK nao entrega contrato publico.
|
|
485
576
|
const tocados = (0, prova_minima_1.cicloSemCheck)(thread) ? contratosDaEntrega(raiz, shaPara, shaDe) : [];
|
|
486
577
|
if (tocados.length > 0) {
|
|
487
|
-
return bloquear('policy.violation',
|
|
578
|
+
return bloquear('policy.violation', (0, locale_1.textoDoCatalogo)((m) => m.ship.contratoPublico(tocados.join(', '))), (0, locale_1.textoDoCatalogo)((m) => m.ship.contratoPublicoCorrecao));
|
|
488
579
|
}
|
|
489
580
|
// O recibo vem do provedor e pertence ao SHA exato da candidata. Teste local
|
|
490
581
|
// verde ou status de outro commit não libera a entrega.
|
|
491
582
|
const ci = (0, ci_1.consultarCi)(carregado, shaDe, remoto, opcoes.executorCi);
|
|
492
583
|
r.ci = ci;
|
|
493
584
|
if (!ci.ok) {
|
|
494
|
-
return bloquear('ci.failed',
|
|
585
|
+
return bloquear('ci.failed', (0, locale_1.textoDoCatalogo)((m) => m.ship.ciReprovou((0, locale_1.remontar)(ci.detail), shaDe, ci.context)), (0, locale_1.textoDoCatalogo)((m) => m.ship.ciReprovouCorrecao(ci.context)));
|
|
586
|
+
}
|
|
587
|
+
// Security scan (spec 11.2): com `verify.security_scan` e sem o scan no bundle do CI, categoria do laco sem varredura
|
|
588
|
+
// no SHA da candidata pede autorizacao humana, antes de qualquer push.
|
|
589
|
+
const naoVarridas = unscannedCategories(carregado, shaDe);
|
|
590
|
+
let autorizariaSemScan = null;
|
|
591
|
+
if (naoVarridas.length > 0) {
|
|
592
|
+
const quem = opcoes.allowUnscanned?.trim();
|
|
593
|
+
if (!quem) {
|
|
594
|
+
return bloquear('human.pending', (0, locale_1.textoDoCatalogo)((m) => m.ship.scanNaoVarrido(naoVarridas.join(', '), shaDe)), (0, locale_1.textoDoCatalogo)((m) => m.ship.scanNaoVarridoCorrecao(threadId)));
|
|
595
|
+
}
|
|
596
|
+
// O ensaio nao grava a autorizacao: so diz, nos passos, o que o ship real gravaria.
|
|
597
|
+
if (r.dryRun)
|
|
598
|
+
autorizariaSemScan = (0, locale_1.textoDoCatalogo)((m) => m.ship.passoAutorizariaSemScan(quem, naoVarridas.join(', '), shaDe));
|
|
599
|
+
else
|
|
600
|
+
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.entregaSemScanAutorizada, { por: quem, categorias: naoVarridas, sha: shaDe });
|
|
495
601
|
}
|
|
496
602
|
// 4. Lease `main-tree`: so uma thread mergeia por vez.
|
|
497
603
|
if (r.dryRun) {
|
|
@@ -500,20 +606,21 @@ function ship(carregado, threadId, opcoes) {
|
|
|
500
606
|
// O ensaio tambem responde ONDE o merge aconteceria e se aquela arvore esta limpa:
|
|
501
607
|
// descobrir isso so na hora do merge real seria descobrir tarde demais.
|
|
502
608
|
const dona = arvoreComBranch(raiz, para);
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
r.detalhe =
|
|
609
|
+
const suja = dona ? temAlteracaoNaoCommitada(dona) : false;
|
|
610
|
+
const temporaria = path.join((0, manifest_1.dirEstado)(raiz), 'tmp');
|
|
611
|
+
const arvoreDoMerge = (m) => dona ? m.ship.arvoreDona(dona, para, suja) : m.ship.arvoreTemporaria(temporaria, para);
|
|
612
|
+
r.detalhe = (0, locale_1.textoDoCatalogo)((m) => m.ship.arvoreDeMerge(arvoreDoMerge(m)));
|
|
507
613
|
// Ensaio de 03/10 (R5): sem remoto (ou com --sem-push), o ensaio diz o mesmo que o ship real, e nao
|
|
508
614
|
// promete um push e uma prova que nao vao acontecer.
|
|
509
|
-
const semPushNoReal = opcoes.semPush
|
|
510
|
-
|
|
615
|
+
const semPushNoReal = opcoes.semPush || !remotoConfigurado(raiz, remoto)
|
|
616
|
+
? (m) => opcoes.semPush ? m.ship.semPushPorFlag : m.ship.semRemoto(remoto) : null;
|
|
511
617
|
r.passos = [
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
618
|
+
r.detalhe,
|
|
619
|
+
...(autorizariaSemScan ? [autorizariaSemScan] : []),
|
|
620
|
+
(0, locale_1.textoDoCatalogo)((m) => m.ship.passoMerge(de)),
|
|
621
|
+
...(semPushNoReal ? [(0, locale_1.textoDoCatalogo)((m) => m.ship.passoSemPush(semPushNoReal(m)))] : [
|
|
515
622
|
`git push ${remoto} ${para}`,
|
|
516
|
-
|
|
623
|
+
(0, locale_1.textoDoCatalogo)((m) => m.ship.passoProvaDoPush(remoto, para)),
|
|
517
624
|
]),
|
|
518
625
|
];
|
|
519
626
|
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.shipIniciado, {
|
|
@@ -547,9 +654,7 @@ function ship(carregado, threadId, opcoes) {
|
|
|
547
654
|
bloqueadaPor: dono?.thread ?? '(desconhecida)',
|
|
548
655
|
motivo: aquisicao.motivo ?? 'lease.busy',
|
|
549
656
|
});
|
|
550
|
-
return bloquear(aquisicao.motivo ?? 'lease.busy', aquisicao.falhaRetomada ? aquisicao.detalhe :
|
|
551
|
-
`desde ${dono?.adquiridoEm ?? '?'} (${dono?.motivo ?? 'sem motivo'}); ` +
|
|
552
|
-
`esta thread entrou na merge queue na posicao ${aquisicao.posicaoNaFila}`, aquisicao.correcao);
|
|
657
|
+
return bloquear(aquisicao.motivo ?? 'lease.busy', aquisicao.falhaRetomada ? aquisicao.detalhe : (0, locale_1.textoDoCatalogo)((m) => m.ship.leaseComOutra(leases_1.LEASE_MAIN_TREE, dono?.thread ?? m.ship.desconhecida, dono?.adquiridoEm ?? '?', dono?.motivo ?? m.ship.semMotivo, aquisicao.posicaoNaFila)), aquisicao.correcao);
|
|
553
658
|
}
|
|
554
659
|
r.lease = aquisicao.lease;
|
|
555
660
|
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.leaseAdquirido, {
|
|
@@ -576,7 +681,7 @@ function ship(carregado, threadId, opcoes) {
|
|
|
576
681
|
}
|
|
577
682
|
catch (e) {
|
|
578
683
|
// Arvore de destino indisponivel e reprovacao tipada, nao excecao vazando pelo CLI.
|
|
579
|
-
return bloquear('tree.blocked', e
|
|
684
|
+
return bloquear('tree.blocked', e instanceof locale_1.ErroDoCatalogo ? (0, locale_1.textoDoCatalogo)(e.montar) : e.message, (0, locale_1.textoDoCatalogo)((m) => m.ship.arvoreCorrecao));
|
|
580
685
|
}
|
|
581
686
|
const passos = [];
|
|
582
687
|
opcoes.revalidarGit?.('merge', arvore.dir);
|
|
@@ -600,11 +705,12 @@ function ship(carregado, threadId, opcoes) {
|
|
|
600
705
|
if (!merge.ok) {
|
|
601
706
|
(0, util_1.exec)('git', ['merge', '--abort'], arvore.dir);
|
|
602
707
|
r.passos = [...passos, 'git merge --abort'];
|
|
603
|
-
|
|
708
|
+
const erro = (merge.stderr || merge.stdout).trim().slice(0, 400);
|
|
709
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.mergeFalhou(de, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.mergeFalhouCorrecao));
|
|
604
710
|
}
|
|
605
711
|
const novo = shaDaRef(arvore.dir, 'HEAD');
|
|
606
712
|
if (!novo) {
|
|
607
|
-
return bloquear('artifact.missing',
|
|
713
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.headIlegivel), (0, locale_1.textoDoCatalogo)((m) => m.ship.confiraRepositorio));
|
|
608
714
|
}
|
|
609
715
|
mergeSha = novo;
|
|
610
716
|
pontaDaBase = novo;
|
|
@@ -612,50 +718,87 @@ function ship(carregado, threadId, opcoes) {
|
|
|
612
718
|
const incorporou = (0, util_1.exec)('git', ['merge-base', '--is-ancestor', shaDe, mergeSha], arvore.dir).ok;
|
|
613
719
|
passos.push(`git merge-base --is-ancestor ${shaDe.slice(0, 8)} ${mergeSha.slice(0, 8)}`);
|
|
614
720
|
if (!incorporou) {
|
|
615
|
-
return bloquear('artifact.missing',
|
|
721
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.naoAncestral(de, mergeSha)), (0, locale_1.textoDoCatalogo)((m) => m.ship.naoEmpurre));
|
|
616
722
|
}
|
|
617
723
|
}
|
|
618
724
|
else {
|
|
619
725
|
// RM-037 (fatia 5, A1): o merge que trouxe a branch, e nao a ponta da base.
|
|
620
726
|
const incorporadoEm = commitQueIncorporou(raiz, shaDe, shaPara, passos);
|
|
621
727
|
if (!incorporadoEm) {
|
|
622
|
-
return bloquear('artifact.missing',
|
|
728
|
+
return bloquear('artifact.missing', (0, locale_1.textoDoCatalogo)((m) => m.ship.semPrimeiroPai(de, para)), (0, locale_1.textoDoCatalogo)((m) => m.ship.semPrimeiroPaiCorrecao));
|
|
623
729
|
}
|
|
624
730
|
mergeSha = incorporadoEm;
|
|
625
|
-
|
|
731
|
+
const incorporado = mergeSha.slice(0, 8);
|
|
732
|
+
passos.push((0, locale_1.textoDoCatalogo)((m) => m.ship.passoJaIncorporado(de, para, incorporado)));
|
|
626
733
|
}
|
|
627
734
|
r.mergeSha = mergeSha;
|
|
628
735
|
r.pontaDaBase = pontaDaBase;
|
|
629
736
|
opcoes.revalidarGit?.('push', arvore.dir);
|
|
630
737
|
// 6. Push PROVADO por ls-remote.
|
|
631
|
-
const temRemoto = remotoConfigurado(arvore.dir, remoto);
|
|
738
|
+
const temRemoto = urlFixada !== null || remotoConfigurado(arvore.dir, remoto);
|
|
632
739
|
r.remoto = temRemoto ? remoto : null;
|
|
633
|
-
if (opcoes.semPush
|
|
740
|
+
if (urlFixada && !opcoes.semPush) {
|
|
741
|
+
const fixado = { gitdir: (0, mcp_ship_transporte_1.criarGitdirDoPush)(raiz), ...urlFixada, config: configDoRemoto };
|
|
742
|
+
const comFixado = (args) => `git --git-dir=<gitdir privado> ${[...configDoRemoto, ...args].join(' ')}`.replaceAll(urlFixada.url, '<origin fixado>');
|
|
743
|
+
try {
|
|
744
|
+
// O sha e o decidido aqui. Sem `-u`: o gitdir privado nao tem branch para rastrear, e gravar o upstream na
|
|
745
|
+
// config do projeto mudaria a config conferida; o `ls-remote` que so decidia o `-u` sai junto.
|
|
746
|
+
const argsPush = ['push', '--', urlFixada.url, `${pontaDaBase}:refs/heads/${para}`];
|
|
747
|
+
const push = gitDoRemotoFixado(fixado, argsPush, 300000);
|
|
748
|
+
passos.push(comFixado(argsPush));
|
|
749
|
+
if (!push.ok) {
|
|
750
|
+
r.passos = passos;
|
|
751
|
+
const erro = (0, forja_1.detalheDoPush)(push.stderr || push.stdout);
|
|
752
|
+
if ((0, forja_1.pushRecusadoPelaProtecao)(`${push.stderr}\n${push.stdout}`)) {
|
|
753
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegida(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegidaCorrecao(threadId)), 'entrega.base-protegida');
|
|
754
|
+
}
|
|
755
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhou(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhouCorrecao));
|
|
756
|
+
}
|
|
757
|
+
const shaRemoto = shaNoRemotoFixado(fixado, para);
|
|
758
|
+
passos.push(comFixado(['ls-remote', '--', urlFixada.url, `refs/heads/${para}`]));
|
|
759
|
+
conferirDepoisDoPush(passos);
|
|
760
|
+
r.shaRemoto = shaRemoto;
|
|
761
|
+
r.pushVerificado = shaRemoto !== null && shaRemoto === pontaDaBase;
|
|
762
|
+
if (!r.pushVerificado) {
|
|
763
|
+
r.passos = passos;
|
|
764
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProva(shaRemoto, pontaDaBase)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProvaCorrecao));
|
|
765
|
+
}
|
|
766
|
+
// A ref de rastreio do projeto acompanha o remoto provado, como no push por nome; local, sem rede.
|
|
767
|
+
(0, util_1.exec)('git', [...TRAVA_LOCAL_DO_FIXADO, 'update-ref', '--', `refs/remotes/${remoto}/${para}`, pontaDaBase], raiz);
|
|
768
|
+
}
|
|
769
|
+
finally {
|
|
770
|
+
fs.rmSync(fixado.gitdir, { recursive: true, force: true });
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
else if (opcoes.semPush || !temRemoto) {
|
|
634
774
|
r.pushVerificado = false;
|
|
635
|
-
r.detalhe = opcoes.semPush
|
|
636
|
-
? 'push nao executado por --sem-push (merge local concluido)'
|
|
637
|
-
: `remoto "${remoto}" nao configurado: merge local concluido, sem push a provar`;
|
|
775
|
+
r.detalhe = (0, locale_1.textoDoCatalogo)((m) => opcoes.semPush ? m.ship.semPushPorFlag : m.ship.semRemoto(remoto));
|
|
638
776
|
}
|
|
639
777
|
else {
|
|
640
|
-
const existeNoRemoto = shaNoRemoto(arvore.dir, remoto, para) !== null;
|
|
778
|
+
const existeNoRemoto = shaNoRemoto(arvore.dir, remoto, para, configDoRemoto) !== null;
|
|
641
779
|
const argsPush = existeNoRemoto
|
|
642
780
|
? ['push', '--', remoto, `refs/heads/${para}:refs/heads/${para}`]
|
|
643
781
|
: ['push', '-u', '--', remoto, `refs/heads/${para}:refs/heads/${para}`];
|
|
644
|
-
const push = (0, util_1.exec)('git', argsPush, arvore.dir, 300000);
|
|
645
|
-
passos.push(
|
|
782
|
+
const push = (0, util_1.exec)('git', [...configDoRemoto, ...argsPush], arvore.dir, 300000);
|
|
783
|
+
passos.push(comConfig(argsPush));
|
|
646
784
|
if (!push.ok) {
|
|
647
785
|
r.passos = passos;
|
|
648
|
-
|
|
786
|
+
const erro = (0, forja_1.detalheDoPush)(push.stderr || push.stdout);
|
|
787
|
+
// A protecao da base recusou: a entrega e por PR/MR e o registro dele. O motivo do gate nao muda, so a orientacao.
|
|
788
|
+
if ((0, forja_1.pushRecusadoPelaProtecao)(`${push.stderr}\n${push.stdout}`)) {
|
|
789
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegida(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegidaCorrecao(threadId)), 'entrega.base-protegida');
|
|
790
|
+
}
|
|
791
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhou(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhouCorrecao));
|
|
649
792
|
}
|
|
650
793
|
// A prova: o sha que o REMOTO devolve tem que ser o mesmo do destino local.
|
|
651
|
-
const shaRemoto = shaNoRemoto(arvore.dir, remoto, para);
|
|
652
|
-
passos.push(
|
|
794
|
+
const shaRemoto = shaNoRemoto(arvore.dir, remoto, para, configDoRemoto);
|
|
795
|
+
passos.push(comConfig(['ls-remote', remoto, `refs/heads/${para}`]));
|
|
796
|
+
conferirDepoisDoPush(passos);
|
|
653
797
|
r.shaRemoto = shaRemoto;
|
|
654
798
|
r.pushVerificado = shaRemoto !== null && shaRemoto === pontaDaBase;
|
|
655
799
|
if (!r.pushVerificado) {
|
|
656
800
|
r.passos = passos;
|
|
657
|
-
return bloquear('runtime.unavailable',
|
|
658
|
-
'o push nao ficou provado', 'rode o ship de novo e confira o remoto');
|
|
801
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProva(shaRemoto, pontaDaBase)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProvaCorrecao));
|
|
659
802
|
}
|
|
660
803
|
}
|
|
661
804
|
r.passos = passos;
|
|
@@ -693,7 +836,9 @@ function ship(carregado, threadId, opcoes) {
|
|
|
693
836
|
passos,
|
|
694
837
|
},
|
|
695
838
|
});
|
|
696
|
-
|
|
839
|
+
// A publicacao da fabrica empurra pelo origin do projeto, sem o transporte fixado: no fixado, nao sai daqui.
|
|
840
|
+
if (!urlFixada)
|
|
841
|
+
(0, fabrica_publicar_1.publicarEmSegundoPlano)(raiz);
|
|
697
842
|
const atualizada = (0, thread_1.lerThread)(raiz, threadId);
|
|
698
843
|
// I-42: ciclo sem SHIP (o `#Fast`) entrega sem trocar de fase; `faseAtual` fica sempre
|
|
699
844
|
// dentro do ciclo, porque board, pulse e prompt resolvem o bloco a partir dela.
|
|
@@ -708,7 +853,7 @@ function ship(carregado, threadId, opcoes) {
|
|
|
708
853
|
}
|
|
709
854
|
finally {
|
|
710
855
|
if (arvore)
|
|
711
|
-
descartarArvore(raiz, arvore);
|
|
856
|
+
descartarArvore(raiz, arvore, urlFixada ? TRAVA_LOCAL_DO_FIXADO : []);
|
|
712
857
|
const solto = (0, leases_1.liberar)(raiz, leases_1.LEASE_MAIN_TREE, threadId);
|
|
713
858
|
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.leaseLiberado, {
|
|
714
859
|
lease: leases_1.LEASE_MAIN_TREE,
|
|
@@ -717,74 +862,75 @@ function ship(carregado, threadId, opcoes) {
|
|
|
717
862
|
});
|
|
718
863
|
}
|
|
719
864
|
}
|
|
720
|
-
/**
|
|
865
|
+
/**
|
|
866
|
+
* Texto de `ork ship` para o CLI. A razao, o detalhe, a correcao e os passos que o ship montou pelo catalogo
|
|
867
|
+
* vieram em pt-BR (como o ledger os guarda) e saem remontados no locale ativo (G2 da F2b).
|
|
868
|
+
*/
|
|
721
869
|
function textoDoShip(r) {
|
|
870
|
+
const m = (0, locale_1.msg)().ship;
|
|
722
871
|
const linhas = [];
|
|
723
872
|
// I-35: horários no fuso do dono, sem rótulo por linha; o fuso é dito uma vez, no fim.
|
|
724
873
|
let comHorario = false;
|
|
725
874
|
const local = (texto) => {
|
|
726
|
-
const
|
|
727
|
-
|
|
875
|
+
const remontado = (0, locale_1.remontar)(texto);
|
|
876
|
+
const localizado = (0, horario_1.localizarTexto)(remontado);
|
|
877
|
+
if (localizado !== remontado)
|
|
728
878
|
comHorario = true;
|
|
729
879
|
return localizado;
|
|
730
880
|
};
|
|
731
881
|
const fechar = () => (comHorario ? [...linhas, (0, horario_1.legendaDoFuso)()] : linhas).join('\n');
|
|
732
|
-
|
|
733
|
-
linhas.push(
|
|
734
|
-
linhas.push(
|
|
735
|
-
linhas.push(
|
|
736
|
-
|
|
737
|
-
linhas.push(
|
|
882
|
+
linhas.push(m.cabecalho(r.dryRun, r.thread));
|
|
883
|
+
linhas.push(m.de(r.de, r.shaDe ? r.shaDe.slice(0, 8) : ''));
|
|
884
|
+
linhas.push(m.para(r.para, r.shaParaAntes ? r.shaParaAntes.slice(0, 8) : ''));
|
|
885
|
+
linhas.push(r.autorizacao.autorizado
|
|
886
|
+
? m.autorizado((0, locale_1.remontar)(r.autorizacao.por), m.tiposDeAutorizacao[r.autorizacao.tipo] ?? r.autorizacao.tipo) : m.aguardandoAutorizacao);
|
|
887
|
+
linhas.push(m.razao(local(r.autorizacao.razao)));
|
|
738
888
|
if (r.verificacao) {
|
|
739
889
|
const v = r.verificacao;
|
|
740
|
-
linhas.push(
|
|
741
|
-
`(${v.claims.filter((c) => c.verificado).length}/${v.claims.length} claims, ` +
|
|
742
|
-
`${v.comandos.filter((c) => c.ok).length}/${v.comandos.length} comandos)`);
|
|
890
|
+
linhas.push(m.verificacao(v.ok, (0, util_1.shaCurto)(v.commit), v.claims.filter((c) => c.verificado).length, v.claims.length, v.comandos.filter((c) => c.ok).length, v.comandos.length));
|
|
743
891
|
}
|
|
744
892
|
if (r.ci) {
|
|
745
|
-
linhas.push(
|
|
893
|
+
linhas.push(r.ci.required ? m.ciExigido(r.ci.state.toUpperCase(), r.ci.context, r.ci.sha.slice(0, 8)) : m.ciNaoExigido);
|
|
746
894
|
}
|
|
747
895
|
linhas.push(...(0, policies_1.linhasDeAviso)(r.violacoes ?? []));
|
|
748
896
|
if (r.leaseOcupadoPor) {
|
|
749
897
|
comHorario = true;
|
|
750
|
-
linhas.push(
|
|
898
|
+
linhas.push(m.leaseOcupado(leases_1.LEASE_MAIN_TREE, r.leaseOcupadoPor.thread, (0, horario_1.formatarDataHora)(r.leaseOcupadoPor.adquiridoEm)));
|
|
751
899
|
}
|
|
752
900
|
else if (r.lease) {
|
|
753
|
-
linhas.push(
|
|
901
|
+
linhas.push(m.leaseTomado(leases_1.LEASE_MAIN_TREE, r.thread));
|
|
754
902
|
}
|
|
755
903
|
else if (r.dryRun) {
|
|
756
|
-
linhas.push(
|
|
904
|
+
linhas.push(m.leaseLivre(leases_1.LEASE_MAIN_TREE));
|
|
757
905
|
}
|
|
758
906
|
if (r.bloqueado) {
|
|
759
907
|
linhas.push('');
|
|
760
|
-
linhas.push(
|
|
761
|
-
linhas.push(
|
|
762
|
-
linhas.push(
|
|
908
|
+
linhas.push(m.bloqueado(String(r.motivo)));
|
|
909
|
+
linhas.push(m.detalhe(local(r.detalhe)));
|
|
910
|
+
linhas.push(m.correcao((0, locale_1.remontar)(r.correcao)));
|
|
763
911
|
return fechar();
|
|
764
912
|
}
|
|
765
913
|
if (r.dryRun) {
|
|
766
914
|
linhas.push('');
|
|
767
|
-
linhas.push(
|
|
915
|
+
linhas.push(m.passosDoEnsaio);
|
|
768
916
|
for (const p of r.passos)
|
|
769
|
-
linhas.push(` ${p}`);
|
|
917
|
+
linhas.push(` ${(0, locale_1.remontar)(p)}`);
|
|
770
918
|
return fechar();
|
|
771
919
|
}
|
|
772
920
|
linhas.push('');
|
|
773
|
-
linhas.push(r.jaIncorporado
|
|
774
|
-
? `Nada a mergear: ${r.de} ja estava em ${r.para}, incorporado em ${r.mergeSha}.`
|
|
775
|
-
: `Merge --no-ff concluido: ${r.mergeSha}`);
|
|
921
|
+
linhas.push(r.jaIncorporado ? m.nadaAMergear(r.de, r.para, String(r.mergeSha)) : m.mergeConcluido(String(r.mergeSha)));
|
|
776
922
|
if (r.pushVerificado) {
|
|
777
|
-
linhas.push(
|
|
778
|
-
linhas.push(
|
|
923
|
+
linhas.push(m.pushProvado(String(r.remoto), r.para, String(r.shaRemoto)));
|
|
924
|
+
linhas.push(m.mesmoSha(r.pontaDaBase ?? String(r.mergeSha)));
|
|
779
925
|
}
|
|
780
926
|
else {
|
|
781
|
-
linhas.push(
|
|
927
|
+
linhas.push(m.pushNaoProvado(local(r.detalhe) || m.semRemotoConfigurado));
|
|
782
928
|
}
|
|
783
929
|
linhas.push('');
|
|
784
|
-
linhas.push(
|
|
930
|
+
linhas.push(m.evidencia);
|
|
785
931
|
for (const p of r.passos)
|
|
786
|
-
linhas.push(` ${p}`);
|
|
932
|
+
linhas.push(` ${(0, locale_1.remontar)(p)}`);
|
|
787
933
|
linhas.push('');
|
|
788
|
-
linhas.push(
|
|
934
|
+
linhas.push(m.ledger(r.thread));
|
|
789
935
|
return fechar();
|
|
790
936
|
}
|