@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
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Definition of Done
|
|
2
|
+
|
|
3
|
+
The universal conditions a delivery meets before it is called done. It consolidates the gates
|
|
4
|
+
the `ork` core already runs and invents no doctrine of its own. Items are numbered only once
|
|
5
|
+
across the whole file, so that a reviewer writes a number and every human and every skill resolve to the
|
|
6
|
+
same line. Cite an item as `DoD 4`.
|
|
7
|
+
|
|
8
|
+
**Sources:** `core/src/phase.ts` (phase contract), `core/src/claims.ts`, `core/src/verify.ts`,
|
|
9
|
+
`core/src/gates.ts`, `core/src/policies.ts`, `core/src/ship.ts`, `core/src/master.ts`,
|
|
10
|
+
`core/src/worktree.ts`, `core/src/leases.ts`, `core/src/retry.ts`, `core/src/fix.ts`,
|
|
11
|
+
`core/src/ratelimit.ts` (block B3: typed retry, GO-FIX/CHECK-REVERIFY and the rate limit queue).
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart LR
|
|
15
|
+
GOAL["GOAL<br/>DoD 17 e 18<br/>objetivo aprovado"] --> PLAN["PLAN<br/>DoD 19 e 20<br/>tradeoffs decididos"]
|
|
16
|
+
PLAN --> GO["GO<br/>DoD 1 a 5 por tarefa"]
|
|
17
|
+
GO --> CHECK["CHECK<br/>DoD 6 a 11<br/>gate da thread"]
|
|
18
|
+
CHECK --> SHIP["SHIP<br/>DoD 12 a 15<br/>gate do merge"]
|
|
19
|
+
SHIP --> MASTER["MASTER<br/>DoD 16<br/>gate de fechamento"]
|
|
20
|
+
CHECK -->|"correcao tipo B"| GO
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Every task, before GO calls it done
|
|
24
|
+
|
|
25
|
+
| # | Check | How it is proven |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| 1 | One atomic commit per task, at most five files changed, with the thread and the task in the message (example: `ork-checkout T3: extrai o calculo de frete`). | `git log --oneline` and `git show --stat` on the thread branch. Above five files the task goes back to PLAN to be sliced. |
|
|
28
|
+
| 2 | The task's verify declared in the PLAN was run and passed. | Run the command. A reported pass is not a pass: `ork verify <thread>` reruns it on the real HEAD. |
|
|
29
|
+
| 3 | Anti-hallucination check: every file the runtime cited exists in the diff and every test it cited exists and passes. | Every statement becomes `ork claims add ... --verificar "<comando>"`, and `ork verify <thread>` reruns it. A mismatch comes out as typed reason `claims.failed`. |
|
|
30
|
+
| 4 | Work inside the thread worktree, with the base stamped in `thread.json`, never in the main tree. | `ork worktree audit <thread>` checks against git itself and exits non-zero if they diverge. |
|
|
31
|
+
| 5 | Every relevant delegated decision was recorded in the ledger with who decided, on what evidence and why. The qualifier carries weight: formatting and internal names are delegable too, and demanding an event for each of them is undue escalation, which the audit weighs the same as under-classification. | `ork phase list <thread>` over the thread's `ledger.jsonl`. |
|
|
32
|
+
|
|
33
|
+
## Every thread, before the CHECK gate passes
|
|
34
|
+
|
|
35
|
+
| # | Check | How it is proven |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| 6 | The full suite is green, including the manifest's `verify:` commands, and code health passes: typecheck, lint and coverage with a declared origin. | `ork verify <thread>`. Every number carries `runtime_reported`, `estimated` or `unavailable`; a gap is published as a gap, never as zero. |
|
|
38
|
+
| 7 | The comparison is against the baseline recorded before GO, separating regression from pre-existing debt. | `ork verify <thread> --baseline` before GO and `ork verify <thread>` after it. A command that passed on the baseline and fails now comes out as `verify.regression`; what already failed before comes out as debt, not as the thread's fault. |
|
|
39
|
+
| 8 | The five review axes (correctness, security, performance, maintainability, style) bring findings or an explicit "none", each categorized as blocker, warning or suggestion. | The five-axis table of the CHECK report, per [code-review-axes.md](code-review-axes.md). |
|
|
40
|
+
| 9 | The security audit reports zero blockers, and the web performance audit either ran or states why the target has no web surface. | The report's audit sections, per [security-checklist.md](security-checklist.md) and [performance-checklist.md](performance-checklist.md). |
|
|
41
|
+
| 10 | Fixes classified honestly: type A is one line or equivalent, recorded, with the affected checks rerun; type B sent the task back to GO, and this CHECK round is the full rerun. | `ork fix open <thread>` derives one fix per typed reason, with the exact spec and the command that judges it; `ork fix reverify <thread>` gives the verdict PER fix and REFUSES a partial rerun when there is a type B. The ledger's `go_fix_opened` and `check_reverify` events against the report's counts. These counts measure the quality of the PLAN and of the GO, not that of the reviewer. |
|
|
42
|
+
| 11 | The report is in the thread directory with exactly one verdict (PASSOU = passed, PRECISA DE MUDANCA = needs changes, BLOQUEADO = blocked), every accepted warning has its record, and the gate was resolved through the right path. | The human answer to `ork gate request <thread>`, through the authenticated channel, for a human decision, or the mode's autonomous decision event, which only a PASSOU verdict allows. A verify failure, an anti-hallucination failure, any CHECK with a type B fix, an envelope deviation, a verdict other than PASSOU and an emergency always go up to the human, in any mode. |
|
|
43
|
+
|
|
44
|
+
## Every merge, before SHIP closes
|
|
45
|
+
|
|
46
|
+
| # | Check | How it is proven |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| 12 | Contract guard: nothing in the final diff changes a versioned public contract (telemetry schema, interface contract, state layout, event types) without a ratified class 2 decision. | `git diff <base>...HEAD` over those files and the id of the gate that ratified it, in the ledger. No ratification, no merge. |
|
|
49
|
+
| 13 | The merge went through the serialized queue, updated against the latest base, fully revalidated whenever the update brought changes, with the `DoD 12` guard rerun against the final diff. | `ork ship <thread> --para <base>` takes the `main-tree` lease; the update can bring changes that touch a contract, so a verdict computed before it describes a diff that no longer exists. |
|
|
50
|
+
| 14 | The push was proven by a command, not reported. | `ork ship` compares the local sha with `git ls-remote` on the remote and writes `pushVerificado` to the ledger. A reported push without the remote's sha counts as a push that did not happen. |
|
|
51
|
+
| 15 | An irreversible step only happens with the mode's authorization: push, merge and deletion require the pause the #TAG provided for or a recorded advance authorization. | `ork ship <thread> --para <base> --autorizar-push <quem>`, or the human answer to the mode's pause, visible in `ork phase list <thread>`. |
|
|
52
|
+
|
|
53
|
+
## Every closure, before the thread dies
|
|
54
|
+
|
|
55
|
+
| # | Check | How it is proven |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| 16 | There is a MASTER log valid against the frozen contract `ork.master-log/v1`, with a typed POSTMORTEM, failure classes from the fixed catalog, an integer score from 0 to 5 and a non-empty justification. A delivery without a MASTER log did not happen. | `ork master <thread> --score N --justificativa "<texto>" --por <quem>`. The command refuses a score outside the scale, a score without a justification, a score without human authorship in `--por` and a class outside the catalog, and writes nothing when it refuses. |
|
|
58
|
+
|
|
59
|
+
## Every thread, at its start
|
|
60
|
+
|
|
61
|
+
| # | Check | How it is proven |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| 17 | The goal of the GOAL phase is verifiable: observable criteria (latency, coverage, behavior), never adjectives. In a fix request, reproducing the defect is a mandatory criterion. | The GOAL becomes claims with a verification command; a criterion that does not become a command is not a criterion. |
|
|
64
|
+
| 18 | The assumptions are written down. An implicit assumption is the biggest source of rework and is treated as a process defect, not as cleverness. | The assumptions section of the GOAL and the claims that tie them down. |
|
|
65
|
+
| 19 | The PLAN brings tasks with queryable `touch_paths` and one executable verify per task. | The thread's PLAN and the `path:<glob>` leases it justifies. |
|
|
66
|
+
| 20 | Decisions D1..Dn have a single home and stay locked once decided; reopening is a new decision, with a record, never a silent edit. | The thread's ledger, where the decision appears with who decided and when. |
|
|
67
|
+
|
|
68
|
+
## Recommendations (not a gate on this machine)
|
|
69
|
+
|
|
70
|
+
- Test coverage as a number: this repository has no coverage tool installed, so
|
|
71
|
+
coverage is reported as `unavailable` instead of estimated.
|
|
72
|
+
- Tool-based dependency audit: `npm audit` runs where a dependency is declared; the
|
|
73
|
+
`ork` core has only development dependencies, and this is stated in the report instead of becoming a
|
|
74
|
+
convenient zero.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Performance Checklist
|
|
2
|
+
|
|
3
|
+
The conditional audit: it runs when the target has a surface that suffers from latency, and when it does
|
|
4
|
+
not have one, it is waived by a written contract, never by oversight. Items are numbered only
|
|
5
|
+
once across the whole file. Cite an item as `PERF 2`.
|
|
6
|
+
|
|
7
|
+
**Sources:** [code-review-axes.md](code-review-axes.md) (axis 3),
|
|
8
|
+
[definition-of-done.md](definition-of-done.md), `core/src/verify.ts`.
|
|
9
|
+
|
|
10
|
+
```mermaid
|
|
11
|
+
flowchart TB
|
|
12
|
+
Q{"o alvo tem superficie<br/>sensivel a latencia?"} -->|"nao"| D["dispensa registrada:<br/>PERF 1, com o motivo"]
|
|
13
|
+
Q -->|"sim"| M["PERF 2 a 6:<br/>medir antes de afirmar"]
|
|
14
|
+
M --> A["PERF 7 e 8:<br/>custo assintotico e recurso"]
|
|
15
|
+
A --> H["PERF 9 e 10:<br/>honestidade de medicao"]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## The waiver contract
|
|
19
|
+
|
|
20
|
+
| # | Check | How it is proven |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| 1 | When the target has no web surface and no latency-sensitive path, the audit is waived with a line saying what the target is and why it has no such surface. A written waiver is a result; a missing audit with no line at all is a gap. | The performance section of the CHECK report, which always exists, even when its content is the waiver. |
|
|
23
|
+
|
|
24
|
+
## Measure before asserting
|
|
25
|
+
|
|
26
|
+
| # | Check | How it is proven |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| 2 | Every performance statement carries a number, a unit and how the number was obtained. "It got faster" without a measurement is opinion, and opinion does not pass a gate. | The report's measurement table, with the command that produced each number. |
|
|
29
|
+
| 3 | There is a measurement before and after, on the same machine and under the same conditions. Comparing measurements from different machines compares machines, not code. | The two runs, with the machine and the conditions declared. |
|
|
30
|
+
| 4 | The measurement was repeated enough to separate signal from noise, and the variation is stated. A single run becomes `estimated`, never `runtime_reported`. | The number of repetitions in the report. |
|
|
31
|
+
| 5 | The measured path is the user's path, not the convenient microbenchmark. A gain in a function nobody calls on the hot path is a suggestion, not a result. | The stretch of the real flow that the measurement covers. |
|
|
32
|
+
| 6 | A detected performance regression is categorized like any other finding: blocker, recorded warning or suggestion. | [code-review-axes.md](code-review-axes.md), categorization rule. |
|
|
33
|
+
|
|
34
|
+
## Asymptotic cost and resources
|
|
35
|
+
|
|
36
|
+
| # | Check | How it is proven |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| 7 | A loop over a collection that grows with use was examined, and the order of magnitude is stated. A quadratic hidden in small data is a defect with a date already set. | Reading the diff at the points that iterate over accumulated state. |
|
|
39
|
+
| 8 | Repeated work inside a loop (file read, process call, parsing the same data) was pointed out, or it was stated that there is none. In `ork`, reading the whole ledger per event would be exactly this defect. | Reading the diff against the I/O points. |
|
|
40
|
+
|
|
41
|
+
## Measurement honesty
|
|
42
|
+
|
|
43
|
+
| # | Check | How it is proven |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| 9 | Every number carries its source: `runtime_reported`, `estimated` or `unavailable`. It is the same discipline as the `ork` token gate, which would rather say "not measurable" than invent a window occupancy. | The source attached to each number in the report. |
|
|
46
|
+
| 10 | What was not measured shows up as `unavailable` with the reason, never as zero, never as a silent absence. A published gap is a gap; a hidden gap becomes a false number on the next reading. | The metrics section of the report. |
|
|
47
|
+
|
|
48
|
+
## Recommendations (not a gate on this machine)
|
|
49
|
+
|
|
50
|
+
- Browser profiling tool (Lighthouse, CPU traces): not installed here. A web performance audit
|
|
51
|
+
of a target with a web surface comes out `unavailable` with the reason while that is the case.
|
|
52
|
+
- Continuous benchmarking with history: out of reach for this machine; the before-and-after comparison is
|
|
53
|
+
done in the thread itself, with an explicit `PERF 3`.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Security Checklist
|
|
2
|
+
|
|
3
|
+
The normative list that the CHECK security audit walks through, whose hard pass condition is
|
|
4
|
+
zero blockers in the consolidated report. It elevates checks that already exist in the core and
|
|
5
|
+
invents none. Items are numbered only once across the whole file. Cite an item as `SEC 5`.
|
|
6
|
+
|
|
7
|
+
**Sources:** `core/src/policies.ts` (secret patterns and blocking policies),
|
|
8
|
+
`core/src/doctor.ts`, `core/src/ship.ts`, `core/src/gates.ts`,
|
|
9
|
+
`core/src/superficie.ts` (deterministic scan of the network attack surface,
|
|
10
|
+
rules SP8..SP12 of the `security-privacy` pack),
|
|
11
|
+
[definition-of-done.md](definition-of-done.md).
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart TB
|
|
15
|
+
E["escopo declarado:<br/>diff, historico, prompts, artefatos"] --> S1["SEC 1 a 4:<br/>segredo e credencial"]
|
|
16
|
+
S1 --> S2["SEC 5 a 8:<br/>entrada e superficie"]
|
|
17
|
+
S2 --> S3["SEC 9 e 10:<br/>dependencia e cadeia"]
|
|
18
|
+
S3 --> S4["SEC 11 a 14:<br/>artefatos do repositorio"]
|
|
19
|
+
S4 --> S5["SEC 15 a 17:<br/>conduta da auditoria"]
|
|
20
|
+
S5 --> S6["SEC 18 a 22:<br/>superficie de ataque de rede"]
|
|
21
|
+
S6 --> C{"algum bloqueador?"}
|
|
22
|
+
C -->|"sim"| B["veredito BLOQUEADO"]
|
|
23
|
+
C -->|"nao"| P["zero bloqueadores:<br/>condicao dura cumprida"]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Secrets and credentials
|
|
27
|
+
|
|
28
|
+
| # | Check | How it is proven |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| 1 | No secret in the working tree: token, API key, password, private key block, connection string and high-entropy string that looks like a credential, including `.env` files, test fixtures and example configs. | Reading of the branch diff plus a scan of the tree. The report names the tool used or says the pass was manual. With `verify.security_scan` declared, the evidence is the `security_scan` (Gitleaks on the tree); the manual pass is only valid with the scan declared `unavailable`. |
|
|
31
|
+
| 2 | No secret in the history behind the branch. A secret committed and later deleted is still leaked. | `git log -p <base>..HEAD` over the whole range, not just the tree. Blocker until the credential is rotated and the history cleaned, with the rotation verified, not promised. With `verify.security_scan` declared, the `security_scan` also scans the commits of `<base>..HEAD`; the manual pass is only valid with the scan declared `unavailable`. |
|
|
32
|
+
| 3 | No real credential in a dispatched prompt. The `phase.dispatch` gate of `ork` evaluates the `segredo_em_prompt` policy BEFORE writing the prompt to disk: a rejected prompt never comes to exist as a file, because writing a prompt with a credential creates a second leak inside the repository itself. | `ork phase run` exits with typed reason `policy.violation`; the ledger records the pattern name and the line, never the matched excerpt. |
|
|
33
|
+
| 4 | No real credential in a thread artifact, the ledger, captured command output or the audit report itself. A leak report that prints the secret is a second leak. | Reading of the artifacts the thread produced. A redacted placeholder passes and is declared as such; a credential is referenced by location and redacted form. |
|
|
34
|
+
|
|
35
|
+
## Input and surface
|
|
36
|
+
|
|
37
|
+
| # | Check | How it is proven |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| 5 | Every input that crosses a trust boundary is validated on the trusting side, not on the calling side. Client-only validation counts as missing. | Reading of the diff at the touched entry points. |
|
|
40
|
+
| 6 | No concatenation of input into SQL, shell, file path or rendered template. The `ork` core runs commands as an argument list, with no interpolated shell, and the same pattern applies to the reviewed code. | Reading of the diff; any command built by concatenation is a blocker. |
|
|
41
|
+
| 7 | Authentication and authorization checked per operation, not per screen: whoever can read cannot always write, and either the test that proves this exists or the finding is a warning with a record. | Authorization tests in the suite, rerun by `ork verify`. |
|
|
42
|
+
| 8 | Deserialization of untrusted data does not instantiate arbitrary types, and every `JSON.parse` of a state file has its error handled with the path in the error text. | Reading of the diff over the points that read state. |
|
|
43
|
+
|
|
44
|
+
## Dependencies and supply chain
|
|
45
|
+
|
|
46
|
+
| # | Check | How it is proven |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| 9 | No new dependency without justification in the PLAN. A dependency that comes in without a task is scope creep with an attack surface. | Diff of the package manifest files against the PLAN tasks. |
|
|
49
|
+
| 10 | Known vulnerabilities in the declared dependencies were looked up, and the result is in the report with the date and the tool. Where there is no tool, the item comes out `unavailable` with the reason. | `npm audit` where a production dependency is declared. With `verify.security_scan` declared, the evidence is the `security_scan` (dependencies and govulncheck `reachable`); the manual pass is only valid with the scan declared `unavailable`. |
|
|
50
|
+
|
|
51
|
+
## Repository artifacts
|
|
52
|
+
|
|
53
|
+
| # | Check | How it is proven |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| 11 | No mass destructive command in a script, hook or documentation that someone will copy: `rm -rf` with an unanchored variable path, `git add -A`, `git checkout -- .`, `git reset --hard` without a target, `push --force`. | Scan of the touched directories. The `PreToolUse` guard of the Claude Code adapter blocks these same commands at run time. |
|
|
56
|
+
| 12 | No direct push to the base branch. The manifest's `push_direto_na_base` policy is blocking and rejects any delivery whose source and target are the same branch. | `ork ship` exits with `policy.violation` before touching the remote. |
|
|
57
|
+
| 13 | No dispatch through a paid provider when the policy is `subscription-only`. An environment variable that redirects `claude` to a paid provider is a blocker, because the cost shows up on the bill and not at the gate. | `ork doctor` and the `provider` policy, evaluated at the `phase.dispatch` gate and in `ship`. |
|
|
58
|
+
| 14 | Permissions on a file created by a script do not widen access: no `chmod 777`, no state file with the execute bit. | Reading of the diff of the scripts and hooks. |
|
|
59
|
+
|
|
60
|
+
## Audit conduct
|
|
61
|
+
|
|
62
|
+
| # | Check | How it is proven |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| 15 | The audited scope is declared before the findings: which directories, which history range, which artifacts. An audit without a declared scope is not reproducible and does not count as evidence. | The header of the report's security section. |
|
|
65
|
+
| 16 | Each finding comes out categorized as blocker, warning or suggestion, with the `SEC n` item it violates. A finding without an item number is opinion. | The report's findings table. |
|
|
66
|
+
| 17 | Absence of findings is stated as the result of a check, with what was looked at. "Nothing found" without a scope is different from "audited and clean", and the difference is written down. | The section text, against `SEC 15`. |
|
|
67
|
+
|
|
68
|
+
## Network attack surface
|
|
69
|
+
|
|
70
|
+
What the product EXPOSES. Items 5 to 8 look at the data that comes in through a boundary; these look at
|
|
71
|
+
the boundary itself: which routes and endpoints exist, who can call them and at what cost. The
|
|
72
|
+
`security-privacy` pack audits this section with a DETERMINISTIC scan (`ork audit surface`, rules
|
|
73
|
+
SP8 to SP12), which runs inside `ork audit run security-privacy` and writes each finding to the
|
|
74
|
+
debt board with `arquivo:linha` evidence and the command that reruns it.
|
|
75
|
+
|
|
76
|
+
| # | Check | How it is proven |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| 18 | Every HTTP/API server route declared in production goes through an authentication/authorization layer, or is public by a recorded decision (login, sign-up, health, signed webhook). A route that is public by oversight is a blocker. | `ork audit surface --regra SP8`. The finding brings the route definition with `arquivo:linha`, the recognized framework and the command that proves the absence of a guard in the route block or in the file. |
|
|
79
|
+
| 19 | An administration or operations endpoint (admin, console, debug, swagger/openapi, detailed health, metrics, `pprof`, cluster metadata) is not reachable from outside: there is a network restriction (allowlist, internal network) or oAuth/basic auth. A health check that returns version, hostname, database or dependency is an operations endpoint, not a health one. | `ork audit surface --regra SP9`, plus the network configuration or the middleware cited with `arquivo:linha`. |
|
|
80
|
+
| 20 | An exposed route has a rate limit per IP and per identity, with special attention to the authentication path, password recovery, OTP, search, export and any public route that changes state. Without a limit, a brute-force costs no more than a request. | `ork audit surface --regra SP10`. Limit, quota or rpm middleware cited on the route, on the router that mounts it or on the gateway, with the file and the line. |
|
|
81
|
+
| 21 | CORS does not combine a global origin with credentials, and an open origin does not appear in a service that carries personal data or sessions. An explicit list of origins, always. | `ork audit surface --regra SP11`. The finding cites the configuration with `arquivo:linha`, the origin wildcard and the credentials flag, each with the command that reruns it. |
|
|
82
|
+
| 22 | The route definition declares the payload schema at the edge (schema, validator, typed model), and an invalid payload is rejected before the handler. Complements item 5, which looks at the USE of the data inside the handler. | `ork audit surface --regra SP12`, with the route definition and the absence of a schema at the entry point. |
|
|
83
|
+
|
|
84
|
+
A finding that the scan marks with confidence `baixa` (low: there is middleware that `ork` does not classify,
|
|
85
|
+
an unrecognized framework, a marker present in the file and absent from the route block) comes out as a
|
|
86
|
+
**warning that asks for human confirmation**, never as a blocker: the machine says where to look, and
|
|
87
|
+
the person decides whether it holds.
|
|
88
|
+
|
|
89
|
+
## Recommendations (not a gate on this machine)
|
|
90
|
+
|
|
91
|
+
- Scanning with a dedicated secret tool (gitleaks, trufflehog): not installed here. The
|
|
92
|
+
patterns in `core/src/policies.ts` cover Anthropic keys, OpenAI keys, AWS access keys, GitHub
|
|
93
|
+
tokens, PEM private keys and secret assignments in text, and the audit says it covered those
|
|
94
|
+
classes and no others.
|
|
95
|
+
- Software composition analysis and artifact signing: out of reach for this machine; it comes out
|
|
96
|
+
`unavailable` with the reason, never as a silent pass.
|
|
97
|
+
- Dynamic surface testing (port scanning, endpoint fuzzing, DAST): out of reach.
|
|
98
|
+
The scan for items 18 to 22 is STATIC and reads the route definition in the code: it does not see
|
|
99
|
+
routes generated at run time, nor a proxy, gateway or WAF in front of the service. Where that
|
|
100
|
+
layer exists, the finding still stands as a question and is resolved with the layer's evidence, never
|
|
101
|
+
in silence.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Testing Patterns
|
|
2
|
+
|
|
3
|
+
What a suite must prove and how a green suite is earned honestly. Items are numbered
|
|
4
|
+
only once across the whole file. Cite an item as `TEST 3`.
|
|
5
|
+
|
|
6
|
+
**Sources:** `core/src/verify.ts` (baseline and re-run), `core/src/claims.ts`,
|
|
7
|
+
[definition-of-done.md](definition-of-done.md), [code-review-axes.md](code-review-axes.md).
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart LR
|
|
11
|
+
B["baseline gravada<br/>antes do GO"] --> G["GO: implementacao<br/>slice por slice"]
|
|
12
|
+
G --> R["reexecucao no HEAD real"]
|
|
13
|
+
R --> D{"comparacao contra a baseline"}
|
|
14
|
+
D -->|"passava e falha"| RG["regressao:<br/>TEST 1, gate verify.regression"]
|
|
15
|
+
D -->|"ja falhava"| DV["divida pre-existente:<br/>declarada, nao imputada a thread"]
|
|
16
|
+
D -->|"tudo verde"| OK["suite verde ganha"]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What the suite proves
|
|
20
|
+
|
|
21
|
+
| # | Check | How it is proven |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 1 | There is a baseline recorded before GO. Without it, a failure cannot tell a regression from pre-existing debt, and the thread takes the blame for a defect that was already there or, worse, hides what it broke itself. | `ork verify <thread> --baseline` before GO. |
|
|
24
|
+
| 2 | Every GOAL success criterion has a command that proves it. A criterion that does not become a command is not a criterion, it is an adjective. | The thread's claims, with `--verificar`. |
|
|
25
|
+
| 3 | In a fix request, there is a test that reproduces the defect and that failed before the fix. A fix whose defect was never reproduced cannot prove it fixed anything. | The new test, run against the commit before the fix. |
|
|
26
|
+
| 4 | The failure path has a test, not only the happy path. A suite that only exercises success measures optimism. | Reading the suite against the PLAN edge cases. |
|
|
27
|
+
| 5 | A new test fails when the implementation is reverted. A test that passes with and without the change does not test the change. | Revert locally and run, or mutate the central line and confirm the failure. |
|
|
28
|
+
|
|
29
|
+
## How the green suite is earned
|
|
30
|
+
|
|
31
|
+
| # | Check | How it is proven |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| 6 | The suite runs on the real HEAD, in the thread's working directory. A pass reported by an agent is not a pass. | `ork verify <thread>` re-runs the manifest commands and the claims, and stamps the real commit. |
|
|
34
|
+
| 7 | No test was disabled, marked to skip or loosened to close the delivery. Skipping a test is a recorded scope change, never a silent course correction. | Diff over the test files, looking for removed tests, `skip` and relaxed assertions. |
|
|
35
|
+
| 8 | No assertion was swapped for the value the code produces today without someone saying why the right value changed. Adjusting the expected to the observed is the most common way to turn a defect into a contract. | Diff of the assertions against the intent declared in the PLAN. |
|
|
36
|
+
| 9 | A test does not depend on the network, on a paid credential or on the wall clock. A deterministic fixture is the standard; whatever needs the outside world stays out of the gate and is declared. | Run the suite offline. In `ork`, the `ork eval` canaries build a temporary git repository and do not touch the network. |
|
|
37
|
+
| 10 | A test does not depend on another test or on the execution order. State shared between cases is a defect, even when the suite is green today. | Run the suspect case in shuffled order or in isolation. |
|
|
38
|
+
|
|
39
|
+
## Count and coverage
|
|
40
|
+
|
|
41
|
+
| # | Check | How it is proven |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| 11 | The reported test count is the one the command printed, pasted from the real output. A suite number typed from memory is not evidence. | The runner output in the delivery report. |
|
|
44
|
+
| 12 | Coverage is reported with its source: `runtime_reported` when the tool measured it, `estimated` when someone estimated it and said so, `unavailable` when there is no tool. A gap is published as a gap, never as zero. | The metrics section of the report. |
|
|
45
|
+
|
|
46
|
+
## Recommendations (not a gate on this machine)
|
|
47
|
+
|
|
48
|
+
- Tool-measured coverage: this repository has no such tool installed, so coverage comes out
|
|
49
|
+
`unavailable` per `TEST 12`, and is not estimated for convenience.
|
|
50
|
+
- Mutation testing to prove `TEST 5` automatically: out of reach for this machine; the proof
|
|
51
|
+
here is manual and declared as manual.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Default quality config: typescript-eslint recommendedTypeChecked with the project's tsconfig (container cwd = repo root)
|
|
2
|
+
import tseslint from 'typescript-eslint';
|
|
3
|
+
|
|
4
|
+
export default tseslint.config(
|
|
5
|
+
{ ignores: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/coverage/**'] },
|
|
6
|
+
{
|
|
7
|
+
files: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],
|
|
8
|
+
extends: [tseslint.configs.recommendedTypeChecked],
|
|
9
|
+
languageOptions: { parserOptions: { projectService: true, tsconfigRootDir: process.cwd() } },
|
|
10
|
+
},
|
|
11
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Ruff default rules; project rules go in .ork-security/ruff.toml
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "osv-scanner",
|
|
4
|
+
"category": "dependency",
|
|
5
|
+
"stacks": "all",
|
|
6
|
+
"image": "ghcr.io/google/osv-scanner@sha256:fca9be4446310094be881b63f6862879282647f121ad3326e91dd90afbf8ef50",
|
|
7
|
+
"version": "2.2.3",
|
|
8
|
+
"native": {
|
|
9
|
+
"bin": "osv-scanner",
|
|
10
|
+
"versionArgs": [
|
|
11
|
+
"--version"
|
|
12
|
+
],
|
|
13
|
+
"versionPattern": "\\b2\\.2\\.\\d+\\b"
|
|
14
|
+
},
|
|
15
|
+
"network": "default",
|
|
16
|
+
"baseMode": "worktree",
|
|
17
|
+
"timeoutMs": 300000,
|
|
18
|
+
"severityMap": {
|
|
19
|
+
"CRITICAL": "critical",
|
|
20
|
+
"HIGH": "high",
|
|
21
|
+
"MODERATE": "medium",
|
|
22
|
+
"MEDIUM": "medium",
|
|
23
|
+
"LOW": "low"
|
|
24
|
+
},
|
|
25
|
+
"args": [
|
|
26
|
+
"sh",
|
|
27
|
+
"-c",
|
|
28
|
+
"bin=$(command -v osv-scanner || echo /osv-scanner); \"$bin\" scan source --recursive --format json --output \"$1\" \"$2\"; rc=$?; if [ $rc -eq 128 ]; then printf '{\"results\":[]}\\n' > \"$1\"; exit 0; fi; [ $rc -le 1 ] || exit $rc",
|
|
29
|
+
"sh",
|
|
30
|
+
"{out}/osv-scanner.json",
|
|
31
|
+
"{src}"
|
|
32
|
+
],
|
|
33
|
+
"env": {
|
|
34
|
+
"HOME": "/tmp"
|
|
35
|
+
},
|
|
36
|
+
"expect": {
|
|
37
|
+
"files": [
|
|
38
|
+
"osv-scanner.json"
|
|
39
|
+
],
|
|
40
|
+
"shape": "object",
|
|
41
|
+
"requireKey": [
|
|
42
|
+
"results"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "oxlint",
|
|
48
|
+
"category": "quality",
|
|
49
|
+
"stacks": [
|
|
50
|
+
"js"
|
|
51
|
+
],
|
|
52
|
+
"image": "node@sha256:6f08a523443ddedf52941874c203475b0ad503e859ad70cb26ab8be9a517dbd5",
|
|
53
|
+
"version": "1.89.0",
|
|
54
|
+
"network": "default",
|
|
55
|
+
"baseMode": "worktree",
|
|
56
|
+
"timeoutMs": 300000,
|
|
57
|
+
"severityMap": {
|
|
58
|
+
"error": "medium",
|
|
59
|
+
"warning": "low"
|
|
60
|
+
},
|
|
61
|
+
"install": [
|
|
62
|
+
"oxlint@1.89.0"
|
|
63
|
+
],
|
|
64
|
+
"args": [
|
|
65
|
+
"sh",
|
|
66
|
+
"-c",
|
|
67
|
+
"mkdir -p /tmp/ox && npm install --prefix /tmp/ox --ignore-scripts --no-audit --no-fund --no-save {install} >&2 && cd \"$2\" && /tmp/ox/node_modules/.bin/oxlint --format json . > /tmp/ox/saida.txt; rc=$?; [ $rc -le 1 ] || exit $rc; node -e 'const fs=require(\"fs\");const t=fs.readFileSync(\"/tmp/ox/saida.txt\",\"utf8\");const i=t.indexOf(\"{\");if(i<0)process.exit(3);const j=JSON.parse(t.slice(i));if(!Array.isArray(j.diagnostics))process.exit(3);fs.writeFileSync(process.argv[1],JSON.stringify(j))' \"$1\" || exit 3",
|
|
68
|
+
"sh",
|
|
69
|
+
"{out}/oxlint.json",
|
|
70
|
+
"{stackDir}"
|
|
71
|
+
],
|
|
72
|
+
"env": {
|
|
73
|
+
"HOME": "/tmp",
|
|
74
|
+
"npm_config_cache": "/tmp/npm-cache",
|
|
75
|
+
"npm_config_update_notifier": "false"
|
|
76
|
+
},
|
|
77
|
+
"expect": {
|
|
78
|
+
"files": [
|
|
79
|
+
"oxlint.json"
|
|
80
|
+
],
|
|
81
|
+
"shape": "object",
|
|
82
|
+
"requireKey": [
|
|
83
|
+
"diagnostics"
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
]
|