@orkastery/cli 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +37 -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/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-pista/hooks/ci.ts +9 -5
- 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/hooks/vigia.ts +1 -1
- 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 +2 -2
- package/adapters/openclaw/README.md +81 -9
- 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/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 +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -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 +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- 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 +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- 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 +123 -80
- package/dist/handoff.js +23 -13
- 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 +51 -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 +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- 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 +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- 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 +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- 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 +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -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 +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- 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 +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- 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 +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- 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/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
|
@@ -97,6 +97,154 @@
|
|
|
97
97
|
"porque": "a bandeira vermelha correspondente"
|
|
98
98
|
}
|
|
99
99
|
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "security-auditor/sem-security-scan-declarado",
|
|
103
|
+
"tipo": "borda",
|
|
104
|
+
"gravidade": "maior",
|
|
105
|
+
"cenario": "O manifesto da thread nao declara `verify.security_scan`.",
|
|
106
|
+
"esperado": "O auditor faz o que fazia: checklist por leitura, sem exigir relatorio de scan.",
|
|
107
|
+
"assercoes": [
|
|
108
|
+
{
|
|
109
|
+
"tipo": "contem",
|
|
110
|
+
"valor": "Sem `verify.security_scan`",
|
|
111
|
+
"porque": "o comportamento anterior preservado"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"tipo": "contem",
|
|
115
|
+
"valor": "passagem manual",
|
|
116
|
+
"porque": "so vale com o scan declarado indisponivel"
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "security-auditor/auditor-nao-edita",
|
|
122
|
+
"tipo": "racionalizacao",
|
|
123
|
+
"gravidade": "maior",
|
|
124
|
+
"cenario": "O auditor quer corrigir o achado do scan ele mesmo, para economizar uma volta.",
|
|
125
|
+
"esperado": "Recusado: o auditor nao edita, devolve um veredito por achado e a correcao e do GO.",
|
|
126
|
+
"racionalizacao": "Ja que achei, corrijo aqui.",
|
|
127
|
+
"assercoes": [
|
|
128
|
+
{
|
|
129
|
+
"tipo": "contem",
|
|
130
|
+
"valor": "O auditor nao edita",
|
|
131
|
+
"porque": "a regra de conduta"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"tipo": "contem",
|
|
135
|
+
"valor": "um veredito por achado `new`",
|
|
136
|
+
"porque": "a triagem do laco"
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "security-auditor/achado-do-gitleaks",
|
|
142
|
+
"tipo": "racionalizacao",
|
|
143
|
+
"gravidade": "maior",
|
|
144
|
+
"cenario": "O scan acha um segredo novo e o auditor quer citar a saida real, com o valor, na correcao.",
|
|
145
|
+
"esperado": "Recusado: a saida e redigida; so regra, arquivo:linha e fingerprint.",
|
|
146
|
+
"racionalizacao": "A correcao pede a saida real, entao colo o valor.",
|
|
147
|
+
"assercoes": [
|
|
148
|
+
{
|
|
149
|
+
"tipo": "contem",
|
|
150
|
+
"valor": "nunca o valor do segredo",
|
|
151
|
+
"porque": "a saida real do Gitleaks e o proprio segredo"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"tipo": "contem",
|
|
155
|
+
"valor": "Valor de segredo do Gitleaks colado na correcao",
|
|
156
|
+
"porque": "a bandeira vermelha correspondente"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"id": "security-auditor/nao-imprime-material-de-segredo",
|
|
162
|
+
"tipo": "racionalizacao",
|
|
163
|
+
"gravidade": "maior",
|
|
164
|
+
"cenario": "O Gitleaks achou um segredo e o auditor quer olhar o commit para entender o contexto.",
|
|
165
|
+
"esperado": "Recusado: a linha e o commit do achado nao vao a saida da sessao por ferramenta nenhuma; o contexto se le sem a linha e a comparacao e por hash.",
|
|
166
|
+
"racionalizacao": "Rodo `git log -p` no commit para ver o contexto do achado.",
|
|
167
|
+
"assercoes": [
|
|
168
|
+
{
|
|
169
|
+
"tipo": "contem",
|
|
170
|
+
"valor": "nao vao a saida por ferramenta nenhuma: Read, `sed`, `head`, `grep -n`, editor, `git log -p`, `git show`, `cat`, diff",
|
|
171
|
+
"porque": "a regra pelo resultado, nao por lista de comandos"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"tipo": "contem",
|
|
175
|
+
"valor": "O contexto sem a linha do achado (`awk -v n=<linha>",
|
|
176
|
+
"porque": "o caminho permitido para o contexto"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"tipo": "contem",
|
|
180
|
+
"valor": "- Linha ou commit de achado `new` do Gitleaks na saida da sessao, por qualquer ferramenta (Read,",
|
|
181
|
+
"porque": "a bandeira vermelha inclui o Read"
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "security-auditor/veredito-chega-ao-go-fix",
|
|
187
|
+
"tipo": "caminho-feliz",
|
|
188
|
+
"gravidade": "maior",
|
|
189
|
+
"cenario": "O auditor deu um veredito real e um falso positivo a dois achados `new` do laco.",
|
|
190
|
+
"esperado": "Cada veredito vira claim do CHECK que o `ork fix open` transforma em correcao do tipo certo.",
|
|
191
|
+
"assercoes": [
|
|
192
|
+
{
|
|
193
|
+
"tipo": "contem",
|
|
194
|
+
"valor": "`ork claims add <thread> <arquivo> --fase CHECK --claim \"<veredito>\" --verificar \"<comando de verify.security_scan>\"`",
|
|
195
|
+
"porque": "o real vira correcao tipo B"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"tipo": "contem",
|
|
199
|
+
"valor": "`ork claims add <thread> .ork-security/dismissals.json --fase CHECK --claim \"<veredito>\"`, sem `--verificar`",
|
|
200
|
+
"porque": "o falso positivo vira correcao tipo A"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"tipo": "contem",
|
|
204
|
+
"valor": "o falso positivo so vale com a linha `negativa` em `nao` e a linha `estado` em `nao-verificavel`",
|
|
205
|
+
"porque": "a conferencia pela saida do `ork claims add`"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"tipo": "contem",
|
|
209
|
+
"valor": "`ork claims retirar <thread> <claim> --motivo \"<motivo>\"` e registre de novo com texto neutro",
|
|
210
|
+
"porque": "a saida quando o texto virou negativa"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"tipo": "contem",
|
|
214
|
+
"valor": "A claim reprova e passa com o scan inteiro, nao com este achado",
|
|
215
|
+
"porque": "o limite do julgamento da claim do real"
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"id": "security-auditor/achado-secret-sem-contexto",
|
|
221
|
+
"tipo": "racionalizacao",
|
|
222
|
+
"gravidade": "maior",
|
|
223
|
+
"cenario": "O Gitleaks achou uma chave privada PEM e o auditor quer ler as linhas vizinhas com a receita do awk, que so pula a linha do achado.",
|
|
224
|
+
"esperado": "Recusado: achado `secret` nao tem leitura de contexto nenhuma; o veredito usa so regra, `arquivo:linha` e `fingerprint`, e a receita do contexto vale so para as outras categorias.",
|
|
225
|
+
"racionalizacao": "Leio as linhas em volta sem a linha do achado, entao nao imprimo o segredo.",
|
|
226
|
+
"assercoes": [
|
|
227
|
+
{
|
|
228
|
+
"tipo": "contem",
|
|
229
|
+
"valor": "**Achado `secret` nao tem leitura de contexto nenhuma:**",
|
|
230
|
+
"porque": "o segredo de varias linhas passa pela mascara de uma linha"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"tipo": "contem",
|
|
234
|
+
"valor": "vale so para as outras categorias (`sast`, `dependency`, `iac`, `workflow`)",
|
|
235
|
+
"porque": "a receita do contexto fica restrita"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"tipo": "contem",
|
|
239
|
+
"valor": "- Contexto de arquivo lido para achado `secret`, mesmo sem a linha do achado.",
|
|
240
|
+
"porque": "a bandeira vermelha correspondente"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"tipo": "contem",
|
|
244
|
+
"valor": "(no locale `en`, a linha `negative` em `no` e a linha `state` em `unverifiable`)",
|
|
245
|
+
"porque": "a conferencia do falso positivo vale nos dois locales"
|
|
246
|
+
}
|
|
247
|
+
]
|
|
100
248
|
}
|
|
101
249
|
]
|
|
102
250
|
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "security-remediation",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "security-remediation/prova-e-o-scan-reexecutado",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "Um achado `new` do security scan foi triado como real e a correcao chegou ao GO.",
|
|
9
|
+
"esperado": "A correcao mexe so no achado e a prova e o scan reexecutado por `ork fix reverify`, nunca a narrativa.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "A prova e o scan reexecutado",
|
|
14
|
+
"porque": "a regra que troca relato por medicao"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "`ork fix reverify`",
|
|
19
|
+
"porque": "o comando que reexecuta o verify e o scan"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "security-remediation/tirei-o-segredo-do-codigo",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "O agente removeu o segredo do arquivo e declara o achado resolvido.",
|
|
28
|
+
"esperado": "Recusado: tirar do codigo nao encerra o achado, falta a rotacao declarada ao dono da credencial.",
|
|
29
|
+
"racionalizacao": "Tirei o segredo do codigo, esta resolvido.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "rotacao",
|
|
34
|
+
"porque": "a rotacao declarada e parte da correcao de segredo"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "o historico nao e limpo por corrigir o codigo",
|
|
39
|
+
"porque": "apagar da arvore nao apaga do historico"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "security-remediation/achado-em-arquivo-excluido",
|
|
45
|
+
"tipo": "borda",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "O achado aponta um arquivo que a config do scan exclui.",
|
|
48
|
+
"esperado": "Nao se corrige arquivo excluido: o caso volta a triagem, e a exclusao e decisao registrada, nao atalho.",
|
|
49
|
+
"assercoes": [
|
|
50
|
+
{
|
|
51
|
+
"tipo": "contem",
|
|
52
|
+
"valor": "Arquivo excluido nao se corrige",
|
|
53
|
+
"porque": "a borda: excluido nao e consertado nem dispensado em silencio"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"tipo": "contem",
|
|
57
|
+
"valor": "mudar a exclusao e decisao registrada",
|
|
58
|
+
"porque": "a exclusao nao e atalho nem corrigida em silencio"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "security-remediation/segredo-sai-do-historico-da-thread",
|
|
64
|
+
"tipo": "borda",
|
|
65
|
+
"gravidade": "maior",
|
|
66
|
+
"cenario": "Um segredo real entrou num commit da thread, a branch nao foi publicada, e o achado continua `new` depois de um commit que apaga a linha.",
|
|
67
|
+
"esperado": "O commit que trouxe o segredo sai de `<base>..HEAD` pela reescrita do historico nao publicado da thread, sem push forcado, e a rotacao continua declarada; branch publicada nao se reescreve.",
|
|
68
|
+
"assercoes": [
|
|
69
|
+
{
|
|
70
|
+
"tipo": "contem",
|
|
71
|
+
"valor": "Segredo que entrou na thread sai do historico da thread",
|
|
72
|
+
"porque": "a regra que tira o commit do intervalo que o Gitleaks varre"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"tipo": "contem",
|
|
76
|
+
"valor": "Nunca so apague a linha num commit novo",
|
|
77
|
+
"porque": "o atalho que deixa o achado `new`"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"tipo": "contem",
|
|
81
|
+
"valor": "Branch ja publicada nao se reescreve",
|
|
82
|
+
"porque": "o limite da reescrita"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"tipo": "contem",
|
|
86
|
+
"valor": "sai 0 e vazio para cada `git remote`",
|
|
87
|
+
"porque": "a prova de que a branch nao foi publicada em remoto nenhum"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"tipo": "contem",
|
|
91
|
+
"valor": "`git merge-base --is-ancestor <base> <alvo>`",
|
|
92
|
+
"porque": "o alvo da reescrita fica dentro da thread"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"tipo": "contem",
|
|
96
|
+
"valor": "a saida e uma dispensa que cita a rotacao declarada, decidida pelo dono",
|
|
97
|
+
"porque": "o caminho da branch publicada"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "security-remediation/uma-correcao-por-achado",
|
|
103
|
+
"tipo": "caminho-feliz",
|
|
104
|
+
"gravidade": "maior",
|
|
105
|
+
"cenario": "O CHECK triou um achado real e um falso positivo e o GO-FIX recebeu a spec do `ork fix open`.",
|
|
106
|
+
"esperado": "O GO-FIX le uma correcao por achado com o tipo e o texto do veredito e fecha o tipo A anexando o comando que prova a dispensa.",
|
|
107
|
+
"assercoes": [
|
|
108
|
+
{
|
|
109
|
+
"tipo": "contem",
|
|
110
|
+
"valor": "uma correcao por claim do CHECK, com o tipo e o texto do veredito (`ork fix list <thread>`)",
|
|
111
|
+
"porque": "o veredito por achado chega ao GO-FIX"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"tipo": "contem",
|
|
115
|
+
"valor": "`ork claims verificar <thread> <claim> --comando \"<comando>\"`",
|
|
116
|
+
"porque": "o comando real que fecha a correcao tipo A"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"tipo": "contem",
|
|
120
|
+
"valor": "o tipo B fecha quando o scan reexecutado sai sem achado `new` do laco",
|
|
121
|
+
"porque": "o julgamento real da claim do achado"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "security-remediation/edita-sem-ler-e-commita-antes-do-scan",
|
|
127
|
+
"tipo": "racionalizacao",
|
|
128
|
+
"gravidade": "maior",
|
|
129
|
+
"cenario": "O GO vai remover um segredo real e quer abrir o arquivo para ver a linha antes de editar, e reexecutar o scan antes do commit.",
|
|
130
|
+
"esperado": "Recusado: quem corrige tambem nunca imprime o valor; edita pelo numero da linha, confere pelo fingerprint no scan, e o scan so le o HEAD commitado.",
|
|
131
|
+
"racionalizacao": "Abro o arquivo so para conferir a linha antes de apagar.",
|
|
132
|
+
"assercoes": [
|
|
133
|
+
{
|
|
134
|
+
"tipo": "contem",
|
|
135
|
+
"valor": "**Quem corrige tambem nunca imprime o valor.**",
|
|
136
|
+
"porque": "a regra do auditor repetida para o GO"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"tipo": "contem",
|
|
140
|
+
"valor": "`sed -i '<n>d' <arquivo>`",
|
|
141
|
+
"porque": "a edicao sem leitura"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"tipo": "contem",
|
|
145
|
+
"valor": "`sed -i '<n>s/.*/<substituto>/' <arquivo>`",
|
|
146
|
+
"porque": "a troca sem leitura"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"tipo": "contem",
|
|
150
|
+
"valor": "o `fingerprint` do achado sai do relatorio novo",
|
|
151
|
+
"porque": "a conferencia pelo scan"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"tipo": "contem",
|
|
155
|
+
"valor": "**O scan le so o HEAD commitado:**",
|
|
156
|
+
"porque": "correcao ou dispensa fora de commit e invisivel"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# security-scan fixtures
|
|
2
|
+
|
|
3
|
+
Deliberately vulnerable projects, one per stack (`js`, `python`, `go`). Everything in them is fake and unsafe on purpose:
|
|
4
|
+
the secrets are random strings that are not credentials, the dependencies are pinned to versions with known CVEs, the
|
|
5
|
+
code has injection patterns and each workflow is unsafe. Never run, install or deploy them.
|
|
6
|
+
|
|
7
|
+
They exist so the real output of every `ork security-scan` tool can be recorded (see
|
|
8
|
+
`core/test/fixtures/security-scan/README.md`) and tested without a network or Docker.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
on:
|
|
3
|
+
pull_request_target:
|
|
4
|
+
branches: [main]
|
|
5
|
+
jobs:
|
|
6
|
+
test:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v4
|
|
10
|
+
with:
|
|
11
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
12
|
+
- run: echo "building ${{ github.event.pull_request.title }}"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# go fixture
|
|
2
|
+
|
|
3
|
+
Deliberately vulnerable and fake. Never run or deploy. It carries a fake secret, a dependency with a known CVE
|
|
4
|
+
(`golang.org/x/text` v0.3.6, reachable from `main.go`), a command injection, an unsafe workflow, a Dockerfile that runs as root and a lint finding.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"database/sql"
|
|
5
|
+
"fmt"
|
|
6
|
+
"net/http"
|
|
7
|
+
"os"
|
|
8
|
+
"os/exec"
|
|
9
|
+
|
|
10
|
+
"golang.org/x/text/language"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
func handler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
|
|
14
|
+
// Command injection: user input reaches a shell.
|
|
15
|
+
out, _ := exec.Command("sh", "-c", "ls "+r.URL.Query().Get("dir")).Output()
|
|
16
|
+
// SQL injection: user input is concatenated into the query.
|
|
17
|
+
rows, _ := db.Query("SELECT name FROM users WHERE id = " + r.URL.Query().Get("id"))
|
|
18
|
+
if rows != nil {
|
|
19
|
+
defer rows.Close()
|
|
20
|
+
}
|
|
21
|
+
// Vulnerable function called: ParseAcceptLanguage (CVE-2022-32149).
|
|
22
|
+
tags, _, _ := language.ParseAcceptLanguage(r.Header.Get("Accept-Language"))
|
|
23
|
+
os.Remove("/tmp/fixture-go")
|
|
24
|
+
fmt.Fprintf(w, "%s %v %s", out, tags, apiKey)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
func main() {
|
|
28
|
+
db, _ := sql.Open("sqlite3", ":memory:")
|
|
29
|
+
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { handler(w, r, db) })
|
|
30
|
+
_ = http.ListenAndServe(":8080", nil)
|
|
31
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
on:
|
|
3
|
+
pull_request_target:
|
|
4
|
+
branches: [main]
|
|
5
|
+
jobs:
|
|
6
|
+
test:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v4
|
|
10
|
+
with:
|
|
11
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
12
|
+
- run: echo "building ${{ github.event.pull_request.title }}"
|