@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/worktree.js
CHANGED
|
@@ -64,6 +64,14 @@ const leases_1 = require("./leases");
|
|
|
64
64
|
const thread_1 = require("./thread");
|
|
65
65
|
const util_1 = require("./util");
|
|
66
66
|
const estado_thread_1 = require("./estado-thread");
|
|
67
|
+
const procedencia_1 = require("./procedencia");
|
|
68
|
+
const locale_1 = require("./locale");
|
|
69
|
+
/**
|
|
70
|
+
* RM-061 (F3b, G4): o detalhe e a correcao que o resultado devolve nascem pelo catalogo, no locale ativo (pt-BR no
|
|
71
|
+
* escopo da gravacao), e ficam registrados para a impressao remonta-los; o que so vai ao ledger sai sempre em pt-BR.
|
|
72
|
+
*/
|
|
73
|
+
const tw = (montar) => (0, locale_1.textoDoCatalogo)((m) => montar(m.worktree));
|
|
74
|
+
const gravado = () => (0, locale_1.msg)('pt-BR').worktree;
|
|
67
75
|
/**
|
|
68
76
|
* Diretorio canonico da worktree de uma thread, resolvido pelo `ork` na arvore principal: o mesmo que a criacao usa,
|
|
69
77
|
* tambem quando o comando roda de dentro de outra worktree (P4 do ensaio da 0.5.0).
|
|
@@ -131,8 +139,8 @@ function garantirWorktree(carregado, id) {
|
|
|
131
139
|
branch,
|
|
132
140
|
base,
|
|
133
141
|
motivo: 'tree.blocked',
|
|
134
|
-
detalhe:
|
|
135
|
-
correcao:
|
|
142
|
+
detalhe: tw((m) => m.naoRegistrada(dir)),
|
|
143
|
+
correcao: tw((m) => m.naoRegistradaCorrecao(id)),
|
|
136
144
|
};
|
|
137
145
|
}
|
|
138
146
|
try {
|
|
@@ -140,7 +148,7 @@ function garantirWorktree(carregado, id) {
|
|
|
140
148
|
}
|
|
141
149
|
catch (e) {
|
|
142
150
|
return { ok: false, criada: false, dir, branch, base, motivo: 'tree.blocked',
|
|
143
|
-
detalhe: e
|
|
151
|
+
detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.reconcilieOEstado(id)) };
|
|
144
152
|
}
|
|
145
153
|
if (thread.worktree !== dir) {
|
|
146
154
|
thread.worktree = dir;
|
|
@@ -160,7 +168,7 @@ function garantirWorktree(carregado, id) {
|
|
|
160
168
|
branch,
|
|
161
169
|
base,
|
|
162
170
|
motivo: null,
|
|
163
|
-
detalhe:
|
|
171
|
+
detalhe: tw((m) => m.jaExiste),
|
|
164
172
|
correcao: '',
|
|
165
173
|
};
|
|
166
174
|
}
|
|
@@ -170,7 +178,7 @@ function garantirWorktree(carregado, id) {
|
|
|
170
178
|
branchExistente: jaTemBranch ? branch : undefined,
|
|
171
179
|
});
|
|
172
180
|
thread.worktree = criada.dir;
|
|
173
|
-
thread.base = { branch: criada.branch, commit:
|
|
181
|
+
thread.base = { branch: criada.branch, commit: criada.commit };
|
|
174
182
|
(0, thread_1.gravarThread)(raiz, thread);
|
|
175
183
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeGarantida, {
|
|
176
184
|
dir: criada.dir,
|
|
@@ -180,16 +188,17 @@ function garantirWorktree(carregado, id) {
|
|
|
180
188
|
branchReusada: jaTemBranch,
|
|
181
189
|
fonte: 'git worktree list --porcelain',
|
|
182
190
|
});
|
|
191
|
+
// RM-037 (defeito 2 de 19 e 20/10/2026): a worktree recriada nasce sem o que o git ignora, como a nova.
|
|
192
|
+
const dependencias = (0, thread_1.prepararDependenciasDaThread)(carregado, id, criada.dir);
|
|
183
193
|
return {
|
|
184
194
|
ok: true,
|
|
185
195
|
criada: true,
|
|
196
|
+
dependencias,
|
|
186
197
|
dir: criada.dir,
|
|
187
198
|
branch: criada.branch,
|
|
188
199
|
base,
|
|
189
200
|
motivo: null,
|
|
190
|
-
detalhe: jaTemBranch
|
|
191
|
-
? `worktree recriada sobre a branch ${criada.branch}, que ja existia`
|
|
192
|
-
: `worktree criada a partir de ${base}`,
|
|
201
|
+
detalhe: tw((m) => jaTemBranch ? m.recriadaSobreBranch(criada.branch) : m.criadaAPartirDe(base)),
|
|
193
202
|
correcao: '',
|
|
194
203
|
};
|
|
195
204
|
}
|
|
@@ -258,8 +267,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
258
267
|
jaAtualizada: false,
|
|
259
268
|
rebaseFeito: false,
|
|
260
269
|
motivo: 'tree.blocked',
|
|
261
|
-
detalhe:
|
|
262
|
-
correcao:
|
|
270
|
+
detalhe: tw((m) => m.semWorktree(id)),
|
|
271
|
+
correcao: tw((m) => m.semWorktreeCorrecao(id)),
|
|
263
272
|
};
|
|
264
273
|
}
|
|
265
274
|
const limpa = arvoreLimpa(dir);
|
|
@@ -270,10 +279,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
270
279
|
jaAtualizada: false,
|
|
271
280
|
rebaseFeito: false,
|
|
272
281
|
motivo: 'tree.blocked',
|
|
273
|
-
detalhe: limpa === null
|
|
274
|
-
|
|
275
|
-
: `${dir} tem alteracao nao commitada; rebase em arvore suja perde trabalho`,
|
|
276
|
-
correcao: `commite ou guarde as alteracoes em ${dir} e rode de novo: ork worktree sync ${id}`,
|
|
282
|
+
detalhe: tw((m) => limpa === null ? m.semStatus(dir) : m.arvoreSuja(dir)),
|
|
283
|
+
correcao: tw((m) => m.arvoreSujaCorrecao(dir, id)),
|
|
277
284
|
};
|
|
278
285
|
}
|
|
279
286
|
try {
|
|
@@ -281,7 +288,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
281
288
|
}
|
|
282
289
|
catch (e) {
|
|
283
290
|
return { ...vazio, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
284
|
-
motivo: 'tree.blocked', detalhe: e
|
|
291
|
+
motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.reconcilieAsCopias) };
|
|
285
292
|
}
|
|
286
293
|
const refBase = (0, util_1.exec)('git', ['rev-parse', '--verify', base], raiz);
|
|
287
294
|
if (!refBase.ok) {
|
|
@@ -291,8 +298,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
291
298
|
jaAtualizada: false,
|
|
292
299
|
rebaseFeito: false,
|
|
293
300
|
motivo: 'tree.blocked',
|
|
294
|
-
detalhe:
|
|
295
|
-
correcao:
|
|
301
|
+
detalhe: tw((m) => m.baseInexistente(base)),
|
|
302
|
+
correcao: tw((m) => m.baseInexistenteCorrecao(carregado.caminho)),
|
|
296
303
|
};
|
|
297
304
|
}
|
|
298
305
|
const shaBase = refBase.stdout.trim();
|
|
@@ -310,7 +317,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
310
317
|
shaAntes,
|
|
311
318
|
shaDepois: shaAntes,
|
|
312
319
|
rebaseFeito: false,
|
|
313
|
-
detalhe:
|
|
320
|
+
detalhe: gravado().jaEraAncestral,
|
|
314
321
|
});
|
|
315
322
|
}
|
|
316
323
|
return {
|
|
@@ -322,7 +329,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
322
329
|
jaAtualizada: true,
|
|
323
330
|
rebaseFeito: false,
|
|
324
331
|
motivo: null,
|
|
325
|
-
detalhe:
|
|
332
|
+
detalhe: tw((m) => m.jaIncorporada(base)),
|
|
326
333
|
correcao: '',
|
|
327
334
|
};
|
|
328
335
|
}
|
|
@@ -336,7 +343,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
336
343
|
passos.push(`git reset --keep ${shaBase}`);
|
|
337
344
|
if (opcoes.dryRun) {
|
|
338
345
|
return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: true, jaAtualizada: false, rebaseFeito: false, recriada: false,
|
|
339
|
-
motivo: null, detalhe:
|
|
346
|
+
motivo: null, detalhe: tw((m) => m.semCommitProprio(branch, base)),
|
|
340
347
|
correcao: '' };
|
|
341
348
|
}
|
|
342
349
|
let recriacao;
|
|
@@ -345,50 +352,48 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
345
352
|
}
|
|
346
353
|
catch (e) {
|
|
347
354
|
return { ...vazio, shaBase, shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
348
|
-
motivo: 'tree.blocked', detalhe: e
|
|
349
|
-
correcao:
|
|
355
|
+
motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e),
|
|
356
|
+
correcao: tw((m) => m.inspecioneAsCopias) };
|
|
350
357
|
}
|
|
351
358
|
const shaDepois = (0, util_1.exec)('git', ['rev-parse', 'HEAD'], dir).stdout.trim();
|
|
352
359
|
if (!recriacao.ok || shaDepois !== shaBase) {
|
|
353
360
|
return { ...vazio, shaBase, shaAntes, shaDepois, ok: false, jaAtualizada: false, rebaseFeito: false, motivo: 'tree.blocked',
|
|
354
|
-
detalhe:
|
|
355
|
-
correcao:
|
|
361
|
+
detalhe: tw((m) => m.recriacaoFalhou(branch, (recriacao.stderr || recriacao.stdout).trim().split('\n').slice(-2).join(' | '))),
|
|
362
|
+
correcao: tw((m) => m.confiraAWorktree(dir, id)) };
|
|
356
363
|
}
|
|
357
|
-
const detalhe = historia.semAncestral
|
|
358
|
-
? `branch sem commit proprio recriada a partir da base ${base} atual; a base foi reescrita e nao tinha historia em comum com ela`
|
|
359
|
-
: `branch sem commit proprio recriada a partir da base ${base} atual`;
|
|
364
|
+
const detalhe = tw((m) => m.recriada(base, historia.semAncestral));
|
|
360
365
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes, shaDepois,
|
|
361
|
-
rebaseFeito: false, recriada: true, semAncestral: historia.semAncestral, detalhe });
|
|
366
|
+
rebaseFeito: false, recriada: true, semAncestral: historia.semAncestral, detalhe: gravado().recriada(base, historia.semAncestral) });
|
|
362
367
|
return { ...vazio, shaBase, shaAntes, shaDepois, ok: true, jaAtualizada: false, rebaseFeito: false, recriada: true,
|
|
363
368
|
motivo: null, detalhe, correcao: '' };
|
|
364
369
|
}
|
|
365
370
|
if (historia.semAncestral) {
|
|
366
|
-
const onto = historia.pontoDePartida
|
|
371
|
+
const onto = (m) => historia.pontoDePartida
|
|
367
372
|
? `git -C ${dir} rebase --onto ${shaBase} ${historia.pontoDePartida}`
|
|
368
|
-
: `git -C ${dir} rebase --onto ${shaBase}
|
|
369
|
-
const detalhe =
|
|
370
|
-
`${historia.proprios ?? 'um numero desconhecido de'} commit(s) proprio(s): o rebase reaplicaria a historia antiga inteira`;
|
|
373
|
+
: `git -C ${dir} rebase --onto ${shaBase} ${m.ondeComecou}`;
|
|
374
|
+
const detalhe = tw((m) => m.semHistoriaComum(base, branch, historia.proprios));
|
|
371
375
|
if (!opcoes.dryRun)
|
|
372
376
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
|
|
373
|
-
rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', semAncestral: true,
|
|
377
|
+
rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', semAncestral: true,
|
|
378
|
+
detalhe: gravado().semHistoriaComum(base, branch, historia.proprios) });
|
|
374
379
|
return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
375
|
-
motivo: 'tree.blocked', causa: 'base-reescrita', detalhe, correcao:
|
|
380
|
+
motivo: 'tree.blocked', causa: 'base-reescrita', detalhe, correcao: tw((m) => m.reaplique(onto(m))) };
|
|
376
381
|
}
|
|
377
382
|
// RM-037 (fatia 3, defeito 3): com ancestral comum, o sync caia no `git rebase <base>` abaixo e
|
|
378
383
|
// reaplicava tambem o que a reescrita tirou da base. O ponto de partida fora da base atual e o sinal.
|
|
379
384
|
if (historia.baseReescrita) {
|
|
380
385
|
const ponto = historia.pontoDePartida;
|
|
381
|
-
passos.push(
|
|
382
|
-
const
|
|
383
|
-
|
|
384
|
-
|
|
386
|
+
passos.push(tw((m) => m.passoBaseReescrita(ponto.slice(0, 8), shaBase.slice(0, 8))));
|
|
387
|
+
const contagem = `git rev-list --count HEAD --not ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)}`;
|
|
388
|
+
const reescrita = (m) => m.baseReescrita(base, ponto.slice(0, 8), branch, historia.sairamDaBase, historia.proprios, contagem);
|
|
389
|
+
const detalhe = tw(reescrita);
|
|
385
390
|
if (!opcoes.dryRun)
|
|
386
391
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
|
|
387
392
|
rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', baseReescrita: true, pontoDePartida: ponto,
|
|
388
|
-
sairamDaBase: historia.sairamDaBase, proprios: historia.proprios, detalhe });
|
|
393
|
+
sairamDaBase: historia.sairamDaBase, proprios: historia.proprios, detalhe: reescrita(gravado()) });
|
|
389
394
|
return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
390
395
|
motivo: 'tree.blocked', causa: 'base-reescrita', detalhe,
|
|
391
|
-
correcao:
|
|
396
|
+
correcao: tw((m) => m.reaplique(`git -C ${dir} rebase --onto ${shaBase} ${ponto}`)) };
|
|
392
397
|
}
|
|
393
398
|
if (opcoes.dryRun) {
|
|
394
399
|
passos.push(`git rebase ${shaBase}`);
|
|
@@ -401,7 +406,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
401
406
|
jaAtualizada: false,
|
|
402
407
|
rebaseFeito: false,
|
|
403
408
|
motivo: null,
|
|
404
|
-
detalhe:
|
|
409
|
+
detalhe: tw((m) => m.rebaseAcima(base)),
|
|
405
410
|
correcao: '',
|
|
406
411
|
};
|
|
407
412
|
}
|
|
@@ -416,8 +421,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
416
421
|
}
|
|
417
422
|
catch (e) {
|
|
418
423
|
return { ...vazio, shaBase, shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
419
|
-
motivo: 'tree.blocked', detalhe: e
|
|
420
|
-
correcao:
|
|
424
|
+
motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e),
|
|
425
|
+
correcao: tw((m) => m.inspecioneAsCopias) };
|
|
421
426
|
}
|
|
422
427
|
passos.push(`git rebase ${shaBase}`);
|
|
423
428
|
if (!rebase.ok) {
|
|
@@ -442,9 +447,8 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
442
447
|
jaAtualizada: false,
|
|
443
448
|
rebaseFeito: false,
|
|
444
449
|
motivo: 'tree.blocked',
|
|
445
|
-
detalhe:
|
|
446
|
-
correcao:
|
|
447
|
-
`ou reduza a regiao da thread com um lease path:<glob> menor`,
|
|
450
|
+
detalhe: tw((m) => m.rebaseConflitou(base, detalhe)),
|
|
451
|
+
correcao: tw((m) => m.rebaseConflitouCorrecao(dir, shaBase)),
|
|
448
452
|
};
|
|
449
453
|
}
|
|
450
454
|
const shaDepois = (0, util_1.exec)('git', ['rev-parse', 'HEAD'], dir).stdout.trim();
|
|
@@ -456,7 +460,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
456
460
|
shaAntes,
|
|
457
461
|
shaDepois,
|
|
458
462
|
rebaseFeito: true,
|
|
459
|
-
detalhe:
|
|
463
|
+
detalhe: gravado().rebasada(base),
|
|
460
464
|
});
|
|
461
465
|
return {
|
|
462
466
|
...vazio,
|
|
@@ -467,7 +471,7 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
467
471
|
jaAtualizada: false,
|
|
468
472
|
rebaseFeito: true,
|
|
469
473
|
motivo: null,
|
|
470
|
-
detalhe:
|
|
474
|
+
detalhe: tw((m) => m.rebasadaSobreEla(base, branch)),
|
|
471
475
|
correcao: '',
|
|
472
476
|
};
|
|
473
477
|
}
|
|
@@ -485,11 +489,11 @@ function auditarWorktree(carregado, id) {
|
|
|
485
489
|
const branchEsperada = branchDaWorktree(thread);
|
|
486
490
|
const checks = [];
|
|
487
491
|
checks.push(thread.worktree
|
|
488
|
-
? { nome: 'registro', nivel: 'ok', detalhe:
|
|
492
|
+
? { nome: 'registro', nivel: 'ok', detalhe: tw((m) => m.apontaPara(thread.worktree)) }
|
|
489
493
|
: {
|
|
490
494
|
nome: 'registro',
|
|
491
495
|
nivel: 'fail',
|
|
492
|
-
detalhe:
|
|
496
|
+
detalhe: tw((m) => m.semRegistroNoThread),
|
|
493
497
|
correcao: `ork worktree ensure ${id}`,
|
|
494
498
|
});
|
|
495
499
|
const existe = fs.existsSync(dir);
|
|
@@ -498,38 +502,47 @@ function auditarWorktree(carregado, id) {
|
|
|
498
502
|
: {
|
|
499
503
|
nome: 'diretorio',
|
|
500
504
|
nivel: 'fail',
|
|
501
|
-
detalhe:
|
|
505
|
+
detalhe: tw((m) => m.naoExisteNoDisco(dir)),
|
|
502
506
|
correcao: `ork worktree ensure ${id}`,
|
|
503
507
|
});
|
|
504
508
|
const registro = worktreesDoGit(raiz).find((w) => w.dir === dir);
|
|
505
509
|
checks.push(registro
|
|
506
|
-
? { nome: 'git', nivel: 'ok', detalhe:
|
|
510
|
+
? { nome: 'git', nivel: 'ok', detalhe: tw((m) => m.apareceNoGit) }
|
|
507
511
|
: {
|
|
508
512
|
nome: 'git',
|
|
509
513
|
nivel: 'fail',
|
|
510
|
-
detalhe:
|
|
514
|
+
detalhe: tw((m) => m.naoApareceNoGit(dir)),
|
|
511
515
|
correcao: `git worktree prune && ork worktree ensure ${id}`,
|
|
512
516
|
});
|
|
513
517
|
if (registro) {
|
|
514
518
|
checks.push(registro.branch === branchEsperada
|
|
515
|
-
? { nome: 'branch', nivel: 'ok', detalhe:
|
|
519
|
+
? { nome: 'branch', nivel: 'ok', detalhe: tw((m) => m.emCheckout(registro.branch)) }
|
|
516
520
|
: {
|
|
517
521
|
nome: 'branch',
|
|
518
522
|
nivel: 'fail',
|
|
519
|
-
detalhe:
|
|
523
|
+
detalhe: tw((m) => m.branchErrada(branchEsperada, registro.branch)),
|
|
520
524
|
correcao: `git -C ${dir} switch ${branchEsperada}`,
|
|
521
525
|
});
|
|
522
526
|
}
|
|
527
|
+
// RM-047 (P2): git so roda na worktree registrada e com o thread.json local.
|
|
528
|
+
let procedencia = null;
|
|
523
529
|
if (existe) {
|
|
530
|
+
try {
|
|
531
|
+
(0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
|
|
532
|
+
}
|
|
533
|
+
catch (e) {
|
|
534
|
+
procedencia = (0, locale_1.textoDoErro)(e);
|
|
535
|
+
checks.push({ nome: 'procedencia', nivel: 'fail', detalhe: procedencia, correcao: `ork worktree ensure ${id}` });
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
if (existe && procedencia === null) {
|
|
524
539
|
const limpa = arvoreLimpa(dir);
|
|
525
540
|
checks.push(limpa === true
|
|
526
|
-
? { nome: 'arvore', nivel: 'ok', detalhe:
|
|
541
|
+
? { nome: 'arvore', nivel: 'ok', detalhe: tw((m) => m.arvoreLimpa) }
|
|
527
542
|
: {
|
|
528
543
|
nome: 'arvore',
|
|
529
544
|
nivel: limpa === null ? 'fail' : 'warn',
|
|
530
|
-
detalhe: limpa === null
|
|
531
|
-
? '`git status` nao respondeu neste diretorio'
|
|
532
|
-
: 'ha alteracao nao commitada na worktree',
|
|
545
|
+
detalhe: tw((m) => limpa === null ? m.statusSemResposta : m.alteracaoNaWorktree),
|
|
533
546
|
correcao: `git -C ${dir} status`,
|
|
534
547
|
});
|
|
535
548
|
const base = manifesto.worktree.base_branch;
|
|
@@ -538,11 +551,11 @@ function auditarWorktree(carregado, id) {
|
|
|
538
551
|
const shaBase = refBase.stdout.trim();
|
|
539
552
|
const incorporada = (0, util_1.exec)('git', ['merge-base', '--is-ancestor', shaBase, 'HEAD'], dir).ok;
|
|
540
553
|
checks.push(incorporada
|
|
541
|
-
? { nome: 'base', nivel: 'ok', detalhe:
|
|
554
|
+
? { nome: 'base', nivel: 'ok', detalhe: tw((m) => m.baseIncorporada(base, shaBase.slice(0, 8))) }
|
|
542
555
|
: {
|
|
543
556
|
nome: 'base',
|
|
544
557
|
nivel: 'fail',
|
|
545
|
-
detalhe:
|
|
558
|
+
detalhe: tw((m) => m.baseAdiante(base, shaBase.slice(0, 8))),
|
|
546
559
|
correcao: `ork worktree sync ${id}`,
|
|
547
560
|
});
|
|
548
561
|
}
|
|
@@ -553,13 +566,13 @@ function auditarWorktree(carregado, id) {
|
|
|
553
566
|
? {
|
|
554
567
|
nome: 'artefatos',
|
|
555
568
|
nivel: 'fail',
|
|
556
|
-
detalhe:
|
|
557
|
-
correcao:
|
|
569
|
+
detalhe: tw((m) => m.artefatosDentro(dirArtefatos)),
|
|
570
|
+
correcao: tw((m) => m.artefatosDentroCorrecao),
|
|
558
571
|
}
|
|
559
572
|
: {
|
|
560
573
|
nome: 'artefatos',
|
|
561
574
|
nivel: 'ok',
|
|
562
|
-
detalhe:
|
|
575
|
+
detalhe: tw((m) => m.artefatosFora(path.relative(raiz, dirArtefatos))),
|
|
563
576
|
});
|
|
564
577
|
if (existe)
|
|
565
578
|
checks.push((0, estado_thread_1.auditarEstado)(raiz, id, dir));
|
|
@@ -575,21 +588,16 @@ function auditarWorktree(carregado, id) {
|
|
|
575
588
|
}
|
|
576
589
|
/** Texto de `ork worktree audit`. */
|
|
577
590
|
function textoDoAudit(id, r) {
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
` branch ${r.branch}`,
|
|
582
|
-
'',
|
|
583
|
-
];
|
|
591
|
+
// RM-061 (F3b): a moldura pelo catalogo; o nome do check (dado do ledger) traduzido so aqui, e o detalhe remontado.
|
|
592
|
+
const m = (0, locale_1.msg)().worktree;
|
|
593
|
+
const linhas = [m.auditoria(id), m.linhaDir(r.dir), m.linhaBranch(r.branch), ''];
|
|
584
594
|
for (const c of r.checks) {
|
|
585
|
-
linhas.push(` ${(0, util_1.simbolo)(c.nivel)} ${c.nome.padEnd(11)} ${c.detalhe}`);
|
|
595
|
+
linhas.push(` ${(0, util_1.simbolo)(c.nivel)} ${m.nomeDoCheck(c.nome).padEnd(11)} ${(0, locale_1.remontar)(c.detalhe)}`);
|
|
586
596
|
if (c.nivel !== 'ok' && c.correcao)
|
|
587
|
-
linhas.push(
|
|
597
|
+
linhas.push(m.correcaoDoCheck((0, locale_1.remontar)(c.correcao)));
|
|
588
598
|
}
|
|
589
599
|
linhas.push('');
|
|
590
|
-
linhas.push(r.ok
|
|
591
|
-
? ' worktree consistente: o git confirma cada item acima.'
|
|
592
|
-
: ` ${r.divergencias} divergencia(s) encontrada(s) no proprio git.`);
|
|
600
|
+
linhas.push(r.ok ? m.consistente : m.divergencias(r.divergencias));
|
|
593
601
|
return linhas.join('\n');
|
|
594
602
|
}
|
|
595
603
|
/** Solta os leases de escrita que a thread ainda segurava. */
|
|
@@ -628,7 +636,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
628
636
|
branch,
|
|
629
637
|
removida: false,
|
|
630
638
|
leasesLiberados: soltos,
|
|
631
|
-
detalhe:
|
|
639
|
+
detalhe: gravado().jaNaoExistia,
|
|
632
640
|
});
|
|
633
641
|
return {
|
|
634
642
|
ok: true,
|
|
@@ -637,10 +645,18 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
637
645
|
branch,
|
|
638
646
|
leasesLiberados: soltos,
|
|
639
647
|
motivo: null,
|
|
640
|
-
detalhe:
|
|
648
|
+
detalhe: tw((m) => m.jaNaoExistiaImpresso),
|
|
641
649
|
correcao: '',
|
|
642
650
|
};
|
|
643
651
|
}
|
|
652
|
+
// RM-047 (P2): nada de git num diretorio que o thread.json escolheu e o git nao registra.
|
|
653
|
+
try {
|
|
654
|
+
(0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
|
|
655
|
+
}
|
|
656
|
+
catch (e) {
|
|
657
|
+
return { ok: false, removida: false, dir, branch, leasesLiberados: [], motivo: 'tree.blocked',
|
|
658
|
+
detalhe: (0, locale_1.textoDoErro)(e), correcao: tw((m) => m.confiraODiretorio(id)) };
|
|
659
|
+
}
|
|
644
660
|
const limpa = arvoreLimpa(dir);
|
|
645
661
|
if (limpa === false && !opcoes.forcar) {
|
|
646
662
|
return {
|
|
@@ -650,8 +666,8 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
650
666
|
branch,
|
|
651
667
|
leasesLiberados: [],
|
|
652
668
|
motivo: 'tree.blocked',
|
|
653
|
-
detalhe:
|
|
654
|
-
correcao:
|
|
669
|
+
detalhe: tw((m) => m.releaseArvoreSuja(dir)),
|
|
670
|
+
correcao: tw((m) => m.releaseArvoreSujaCorrecao(dir)),
|
|
655
671
|
};
|
|
656
672
|
}
|
|
657
673
|
const argumentos = ['worktree', 'remove', dir];
|
|
@@ -666,8 +682,8 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
666
682
|
branch,
|
|
667
683
|
leasesLiberados: [],
|
|
668
684
|
motivo: 'tree.blocked',
|
|
669
|
-
detalhe:
|
|
670
|
-
correcao:
|
|
685
|
+
detalhe: tw((m) => m.removeFalhou((r.stderr || r.stdout).trim())),
|
|
686
|
+
correcao: tw((m) => m.removeFalhouCorrecao(dir)),
|
|
671
687
|
};
|
|
672
688
|
}
|
|
673
689
|
(0, util_1.exec)('git', ['worktree', 'prune'], raiz);
|
|
@@ -680,7 +696,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
680
696
|
branch,
|
|
681
697
|
leasesLiberados: [],
|
|
682
698
|
motivo: 'tree.blocked',
|
|
683
|
-
detalhe:
|
|
699
|
+
detalhe: tw((m) => m.continuaNaLista(dir)),
|
|
684
700
|
correcao: 'git worktree prune && git worktree list',
|
|
685
701
|
};
|
|
686
702
|
}
|
|
@@ -702,7 +718,7 @@ function liberarWorktree(carregado, id, opcoes = {}) {
|
|
|
702
718
|
branch,
|
|
703
719
|
leasesLiberados: soltos,
|
|
704
720
|
motivo: null,
|
|
705
|
-
detalhe:
|
|
721
|
+
detalhe: tw((m) => m.removida(branch)),
|
|
706
722
|
correcao: '',
|
|
707
723
|
};
|
|
708
724
|
}
|
package/dist/yaml.js
CHANGED
|
@@ -55,10 +55,16 @@ function escalar(bruto) {
|
|
|
55
55
|
}
|
|
56
56
|
return t;
|
|
57
57
|
}
|
|
58
|
-
function preparar(texto) {
|
|
58
|
+
function preparar(texto, estrito) {
|
|
59
59
|
const linhas = [];
|
|
60
60
|
texto.split('\n').forEach((original, i) => {
|
|
61
|
-
const
|
|
61
|
+
const cortada = tirarComentario(original);
|
|
62
|
+
// D9: no modo estrito, o `#` depois do valor nao corta o valor calado (`titulo: Decisao #42`); com o `#`
|
|
63
|
+
// no texto, o valor vai entre aspas. Comentario na linha inteira segue valendo.
|
|
64
|
+
if (estrito && cortada !== original && cortada.trim() !== '') {
|
|
65
|
+
throw new Error(`YAML invalido na linha ${i + 1}: comentario depois do valor (com # no texto, use aspas)`);
|
|
66
|
+
}
|
|
67
|
+
const semComentario = cortada.replace(/\s+$/, '');
|
|
62
68
|
if (semComentario.trim() === '')
|
|
63
69
|
return;
|
|
64
70
|
if (semComentario.trim() === '---')
|
|
@@ -68,7 +74,7 @@ function preparar(texto) {
|
|
|
68
74
|
});
|
|
69
75
|
return linhas;
|
|
70
76
|
}
|
|
71
|
-
function parseBloco(linhas, inicio, indent) {
|
|
77
|
+
function parseBloco(linhas, inicio, indent, estrito) {
|
|
72
78
|
let i = inicio;
|
|
73
79
|
if (i >= linhas.length)
|
|
74
80
|
return [null, i];
|
|
@@ -89,6 +95,9 @@ function parseBloco(linhas, inicio, indent) {
|
|
|
89
95
|
throw new Error(`YAML invalido na linha ${linha.numero}: esperado "chave: valor"`);
|
|
90
96
|
}
|
|
91
97
|
const chave = linha.conteudo.slice(0, sep).trim().replace(/^["']|["']$/g, '');
|
|
98
|
+
if (estrito && (chave === '__proto__' || Object.hasOwn(mapa, chave))) {
|
|
99
|
+
throw new Error(`YAML invalido na linha ${linha.numero}: chave ${chave === '__proto__' ? 'reservada' : 'repetida'}`);
|
|
100
|
+
}
|
|
92
101
|
const resto = linha.conteudo.slice(sep + 1).trim();
|
|
93
102
|
i++;
|
|
94
103
|
if (resto !== '') {
|
|
@@ -96,7 +105,7 @@ function parseBloco(linhas, inicio, indent) {
|
|
|
96
105
|
continue;
|
|
97
106
|
}
|
|
98
107
|
if (i < linhas.length && linhas[i].indent > indent) {
|
|
99
|
-
const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent);
|
|
108
|
+
const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent, estrito);
|
|
100
109
|
mapa[chave] = filho;
|
|
101
110
|
i = proximo;
|
|
102
111
|
}
|
|
@@ -106,11 +115,21 @@ function parseBloco(linhas, inicio, indent) {
|
|
|
106
115
|
}
|
|
107
116
|
return [mapa, i];
|
|
108
117
|
}
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Le um documento YAML do subconjunto suportado.
|
|
120
|
+
*
|
|
121
|
+
* RM-026 K7 (D9): `estrito` serve a quem le texto que nao e do `ork` (o frontmatter do conhecimento). Chave
|
|
122
|
+
* repetida no mesmo mapa, `__proto__`, comentario depois do valor e linha que sobra (indentacao fora do bloco)
|
|
123
|
+
* recusam, em vez de sumir calados como no modo padrao, que o `orkastery.yaml` e as paginas de docs seguem usando.
|
|
124
|
+
*/
|
|
125
|
+
function lerYaml(texto, opcoes = {}) {
|
|
126
|
+
const estrito = opcoes.estrito === true;
|
|
127
|
+
const linhas = preparar(texto, estrito);
|
|
112
128
|
if (linhas.length === 0)
|
|
113
129
|
return {};
|
|
114
|
-
const [valor] = parseBloco(linhas, 0, linhas[0].indent);
|
|
130
|
+
const [valor, proximo] = parseBloco(linhas, 0, linhas[0].indent, estrito);
|
|
131
|
+
if (estrito && proximo < linhas.length) {
|
|
132
|
+
throw new Error(`YAML invalido na linha ${linhas[proximo].numero}: indentacao fora do bloco`);
|
|
133
|
+
}
|
|
115
134
|
return valor;
|
|
116
135
|
}
|
|
@@ -98,6 +98,83 @@
|
|
|
98
98
|
"porque": "a regra dos motivos tipados"
|
|
99
99
|
}
|
|
100
100
|
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "check-quality/zero-bloqueadores-com-scan",
|
|
104
|
+
"tipo": "borda",
|
|
105
|
+
"gravidade": "maior",
|
|
106
|
+
"cenario": "O scan do CHECK tem achado `new` do laco sem veredito de triagem e um achado `warn`.",
|
|
107
|
+
"esperado": "Nao ha zero bloqueadores: falta o veredito. O `warn` vai ao eixo certo como aviso registrado.",
|
|
108
|
+
"assercoes": [
|
|
109
|
+
{
|
|
110
|
+
"tipo": "contem",
|
|
111
|
+
"valor": "nenhum achado `new` do laco sem veredito resolvido",
|
|
112
|
+
"porque": "a definicao de zero bloqueadores com o scan"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"tipo": "contem",
|
|
116
|
+
"valor": "aviso registrado",
|
|
117
|
+
"porque": "o warn nao e descartado"
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "check-quality/inconclusivo-pelo-gate-da-pausa",
|
|
123
|
+
"tipo": "borda",
|
|
124
|
+
"gravidade": "maior",
|
|
125
|
+
"cenario": "O auditor deu inconclusivo a um achado `new` do laco e a sessao do CHECK tenta abrir o pedido ao dono.",
|
|
126
|
+
"esperado": "O pedido sai depois da sessao, pelo `ork gate request` da pausa do bloco; de dentro da sessao ou com motivo livre ele recusa, e sem a pausa o veredito e BLOQUEADO.",
|
|
127
|
+
"assercoes": [
|
|
128
|
+
{
|
|
129
|
+
"tipo": "contem",
|
|
130
|
+
"valor": "Inconclusivo nao abre o pedido de dentro da sessao do CHECK",
|
|
131
|
+
"porque": "a recusa medida na prova ponta a ponta"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"tipo": "contem",
|
|
135
|
+
"valor": "`ork gate request <thread> --formato telegram`",
|
|
136
|
+
"porque": "o comando que abre a pausa ao dono"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"tipo": "contem",
|
|
140
|
+
"valor": "`modo nao preve pausa humana nesta fase`",
|
|
141
|
+
"porque": "o modo sem pausa no CHECK"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"tipo": "contem",
|
|
145
|
+
"valor": "quem conduz aponta ao dono a pergunta do parecer",
|
|
146
|
+
"porque": "o pedido do gate leva so a pergunta generica"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"tipo": "contem",
|
|
150
|
+
"valor": "A resposta do dono vira claim do CHECK",
|
|
151
|
+
"porque": "a resposta chega ao GO-FIX pelo mesmo caminho"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"tipo": "contem",
|
|
155
|
+
"valor": "#Look e #Ork tambem pausavam no CHECK, mas estao aposentados (I-43)",
|
|
156
|
+
"porque": "a lista de modos com a pausa"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "check-quality/veredito-por-achado-no-fix-open",
|
|
162
|
+
"tipo": "caminho-feliz",
|
|
163
|
+
"gravidade": "maior",
|
|
164
|
+
"cenario": "O CHECK reprovou pelo scan com um achado real e um falso positivo triados.",
|
|
165
|
+
"esperado": "O `ork fix open` abre uma correcao por claim do CHECK, tipo B para o real e tipo A para o falso positivo.",
|
|
166
|
+
"assercoes": [
|
|
167
|
+
{
|
|
168
|
+
"tipo": "contem",
|
|
169
|
+
"valor": "`ork fix open <thread>` reexecuta o verify e abre uma correcao por claim reprovada",
|
|
170
|
+
"porque": "o mecanismo real do veredito por achado"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"tipo": "contem",
|
|
174
|
+
"valor": "tipo A para o falso positivo (`claims.unverifiable`)",
|
|
175
|
+
"porque": "o tipo que a claim sem comando produz"
|
|
176
|
+
}
|
|
177
|
+
]
|
|
101
178
|
}
|
|
102
179
|
]
|
|
103
180
|
}
|