@orkastery/cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -0
  3. package/adapters/README.md +22 -0
  4. package/adapters/claude-code/.claude-plugin/marketplace.json +15 -0
  5. package/adapters/claude-code/.claude-plugin/plugin.json +31 -0
  6. package/adapters/claude-code/README.md +102 -0
  7. package/adapters/claude-code/agents/ork-check.md +32 -0
  8. package/adapters/claude-code/agents/ork-go.md +32 -0
  9. package/adapters/claude-code/agents/ork-goal.md +33 -0
  10. package/adapters/claude-code/agents/ork-master.md +32 -0
  11. package/adapters/claude-code/agents/ork-plan.md +32 -0
  12. package/adapters/claude-code/agents/ork-ship.md +32 -0
  13. package/adapters/claude-code/commands/check.md +45 -0
  14. package/adapters/claude-code/commands/go.md +46 -0
  15. package/adapters/claude-code/commands/goal.md +54 -0
  16. package/adapters/claude-code/commands/master.md +42 -0
  17. package/adapters/claude-code/commands/ork.md +37 -0
  18. package/adapters/claude-code/commands/plan.md +47 -0
  19. package/adapters/claude-code/commands/ship.md +45 -0
  20. package/adapters/claude-code/hooks/hooks.json +17 -0
  21. package/adapters/claude-code/hooks/ork-guard.js +130 -0
  22. package/adapters/hermes/README.md +45 -0
  23. package/adapters/hermes/bin/ork-abrir-thread.sh +25 -0
  24. package/adapters/hermes/hermes.plugin.json +21 -0
  25. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +116 -0
  26. package/adapters/openclaw/README.md +63 -0
  27. package/adapters/openclaw/bin/ork-abrir-thread.sh +24 -0
  28. package/adapters/openclaw/openclaw.plugin.json +138 -0
  29. package/dist/adapters/claude-bg.js +308 -0
  30. package/dist/auditoria.js +848 -0
  31. package/dist/auditrun.js +976 -0
  32. package/dist/board.js +314 -0
  33. package/dist/canarios.js +271 -0
  34. package/dist/catalogo.js +124 -0
  35. package/dist/ciclos.js +156 -0
  36. package/dist/claims.js +226 -0
  37. package/dist/divida.js +374 -0
  38. package/dist/doctor.js +246 -0
  39. package/dist/evalrunner.js +458 -0
  40. package/dist/fix.js +450 -0
  41. package/dist/gates.js +92 -0
  42. package/dist/handoff.js +521 -0
  43. package/dist/hosts.js +331 -0
  44. package/dist/index.js +1910 -0
  45. package/dist/init.js +231 -0
  46. package/dist/leases.js +508 -0
  47. package/dist/ledger.js +138 -0
  48. package/dist/manifest.js +255 -0
  49. package/dist/master.js +453 -0
  50. package/dist/memoria.js +773 -0
  51. package/dist/modos.js +220 -0
  52. package/dist/orkmind.js +487 -0
  53. package/dist/orquestracao.js +559 -0
  54. package/dist/phase.js +572 -0
  55. package/dist/policies.js +176 -0
  56. package/dist/prompts.js +406 -0
  57. package/dist/ratelimit.js +179 -0
  58. package/dist/recall.js +252 -0
  59. package/dist/retry.js +917 -0
  60. package/dist/sandbox.js +94 -0
  61. package/dist/sessoes.js +104 -0
  62. package/dist/ship.js +551 -0
  63. package/dist/slug.js +100 -0
  64. package/dist/superficie.js +1347 -0
  65. package/dist/thread.js +333 -0
  66. package/dist/tokens.js +228 -0
  67. package/dist/types.js +20 -0
  68. package/dist/util.js +156 -0
  69. package/dist/verify.js +262 -0
  70. package/dist/worktree.js +576 -0
  71. package/dist/yaml.js +112 -0
  72. package/eval/README.md +85 -0
  73. package/eval/casos/check-quality.json +103 -0
  74. package/eval/casos/code-reviewer.json +102 -0
  75. package/eval/casos/decision-triage.json +103 -0
  76. package/eval/casos/go-implementation.json +103 -0
  77. package/eval/casos/goal-definition.json +103 -0
  78. package/eval/casos/master-metrics.json +103 -0
  79. package/eval/casos/narrative-guardian.json +163 -0
  80. package/eval/casos/orkastery-bootstrap.json +102 -0
  81. package/eval/casos/plan-specification.json +102 -0
  82. package/eval/casos/roadmap-keeper.json +103 -0
  83. package/eval/casos/scope-check-capability-map.json +83 -0
  84. package/eval/casos/security-auditor.json +102 -0
  85. package/eval/casos/ship-release.json +122 -0
  86. package/eval/casos/test-engineer.json +122 -0
  87. package/eval/casos/thread-state.json +82 -0
  88. package/eval/casos/thread-tracing.json +83 -0
  89. package/eval/casos/web-performance-auditor.json +102 -0
  90. package/eval/fixtures/b0-slug-e-modos/caso.json +56 -0
  91. package/eval/fixtures/b2-master-log/caso.json +91 -0
  92. package/eval/fixtures/fx-concurrency/caso.json +15 -0
  93. package/eval/fixtures/fx-hallucination/caso.json +12 -0
  94. package/eval/fixtures/fx-happy/caso.json +16 -0
  95. package/eval/fixtures/fx-schema-drift/caso.json +15 -0
  96. package/eval/fixtures/fx-stale-base/caso.json +12 -0
  97. package/eval/fixtures/fx-wiki-destroy/caso.json +16 -0
  98. package/eval/fixtures/superficie-de-rede/README.md +22 -0
  99. package/eval/fixtures/superficie-de-rede/api-express.js +30 -0
  100. package/eval/fixtures/superficie-de-rede/api_fastapi.py +17 -0
  101. package/eval/fixtures/superficie-de-rede/api_gin.go +18 -0
  102. package/package.json +56 -0
  103. package/references/README.md +25 -0
  104. package/references/code-review-axes.md +82 -0
  105. package/references/definition-of-done.md +74 -0
  106. package/references/performance-checklist.md +53 -0
  107. package/references/security-checklist.md +101 -0
  108. package/references/testing-patterns.md +51 -0
  109. package/skills/README.md +43 -0
  110. package/skills/core/orkastery-bootstrap/SKILL.md +89 -0
  111. package/skills/core/thread-state/SKILL.md +86 -0
  112. package/skills/governance/decision-triage/SKILL.md +65 -0
  113. package/skills/governance/narrative-guardian/SKILL.md +66 -0
  114. package/skills/governance/roadmap-keeper/SKILL.md +60 -0
  115. package/skills/governance/scope-check-capability-map/SKILL.md +61 -0
  116. package/skills/observability/thread-tracing/SKILL.md +63 -0
  117. package/skills/phases/check-quality/SKILL.md +87 -0
  118. package/skills/phases/go-implementation/SKILL.md +70 -0
  119. package/skills/phases/goal-definition/SKILL.md +69 -0
  120. package/skills/phases/master-metrics/SKILL.md +65 -0
  121. package/skills/phases/plan-specification/SKILL.md +67 -0
  122. package/skills/phases/ship-release/SKILL.md +68 -0
  123. package/skills/reviewers/code-reviewer/SKILL.md +61 -0
  124. package/skills/reviewers/security-auditor/SKILL.md +68 -0
  125. package/skills/reviewers/test-engineer/SKILL.md +66 -0
  126. package/skills/reviewers/web-performance-auditor/SKILL.md +63 -0
@@ -0,0 +1,91 @@
1
+ {
2
+ "descricao": "Contrato congelado do MASTER log (bloco B2): o que passa, o que reprova e por que.",
3
+ "contrato": "ork.master-log/v1",
4
+ "camposObrigatorios": [
5
+ "contrato",
6
+ "versao",
7
+ "thread",
8
+ "slug",
9
+ "projeto",
10
+ "modo",
11
+ "tag",
12
+ "fases",
13
+ "score",
14
+ "justificativa",
15
+ "avaliadoPor",
16
+ "avaliadoEm",
17
+ "classesDeFalha",
18
+ "resumo",
19
+ "base",
20
+ "evidencia"
21
+ ],
22
+ "classesFixas": [
23
+ "sem-falha",
24
+ "erro-de-spec",
25
+ "base-avancou",
26
+ "conflito",
27
+ "rate-limit",
28
+ "modelo",
29
+ "processo",
30
+ "scope-creep",
31
+ "outra"
32
+ ],
33
+ "valido": {
34
+ "contrato": "ork.master-log/v1",
35
+ "versao": 1,
36
+ "thread": "ork-checkout",
37
+ "slug": "ork-checkout-f12",
38
+ "projeto": { "name": "orkastery", "abbrev": "ork" },
39
+ "modo": "ork",
40
+ "tag": "#Ork",
41
+ "variante": null,
42
+ "fases": ["GOAL", "PLAN", "GO", "CHECK", "SHIP", "MASTER"],
43
+ "score": 4,
44
+ "justificativa": "entregou o combinado; a base andou no meio e exigiu ressincronizacao",
45
+ "avaliadoPor": "julio",
46
+ "avaliadoEm": "2026-01-15T12:00:00.000Z",
47
+ "classesDeFalha": ["base-avancou"],
48
+ "resumo": "thread ork-checkout fechada com score 4/5",
49
+ "base": { "branch": "main", "commit": "0123456789abcdef0123456789abcdef01234567" },
50
+ "worktree": null,
51
+ "evidencia": {
52
+ "ledger": ".orkastery/threads/ork-checkout/ledger.jsonl",
53
+ "postmortem": ".orkastery/threads/ork-checkout/POSTMORTEM.json",
54
+ "eventos": 12,
55
+ "sessoes": 3,
56
+ "claims": 4
57
+ }
58
+ },
59
+ "invalidos": [
60
+ {
61
+ "nome": "score fora da escala de 0 a 5",
62
+ "mudanca": { "score": 7 },
63
+ "erroEsperado": "inteiro de 0 a 5"
64
+ },
65
+ {
66
+ "nome": "score sem justificativa",
67
+ "mudanca": { "justificativa": "" },
68
+ "erroEsperado": "justificativa"
69
+ },
70
+ {
71
+ "nome": "classe de falha fora do catalogo fixo",
72
+ "mudanca": { "classesDeFalha": ["quase-deu-certo"] },
73
+ "erroEsperado": "catalogo fixo"
74
+ },
75
+ {
76
+ "nome": "fase fora do ciclo canonico",
77
+ "mudanca": { "fases": ["GOAL", "F7"] },
78
+ "erroEsperado": "fora do ciclo canonico"
79
+ },
80
+ {
81
+ "nome": "contrato trocado sem trocar a versao",
82
+ "mudanca": { "contrato": "ork.master-log/v2" },
83
+ "erroEsperado": "contrato"
84
+ },
85
+ {
86
+ "nome": "sem evidencia apontando ledger e postmortem",
87
+ "mudanca": { "evidencia": { "eventos": 0 } },
88
+ "erroEsperado": "evidencia"
89
+ }
90
+ ]
91
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "fx-concurrency",
3
+ "sobre": "Duas threads pedem regioes que se cruzam: path:core/src/** e path:core/src/board.ts. A primeira leva o lease, a segunda entra na fila na posicao 1 com motivo tipado.",
4
+ "porque": "Threads paralelas so valem se a colisao for detectada por glob e nao por intuicao. A segunda thread precisa ESPERAR, com posicao e motivo, em vez de escrever por cima: sem fila, paralelismo vira corrida e o prejuizo aparece no merge.",
5
+ "precisa": ["git"],
6
+ "esperado": {
7
+ "primeiraAdquiriu": true,
8
+ "segundaAdquiriu": false,
9
+ "segundaNaFila": true,
10
+ "posicaoDaSegunda": 1,
11
+ "motivoDaSegunda": "lease.busy",
12
+ "colidiuComAThread": "evl-primeira",
13
+ "threadDaPrimeira": "evl-primeira"
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "fx-hallucination",
3
+ "sobre": "O agente alega ter criado src/pagamentos.ts e diz que nao existe TODO nenhum no repositorio. Nenhuma das duas coisas e verdade.",
4
+ "porque": "E a falha mais cara do trabalho com agente: um resumo convincente sobre um arquivo que nunca existiu. A alegacao positiva reprova porque o comando falha; a alegacao negativa e absoluta reprova por nao ter como ser comprovada. O modo aqui e #Auto de proposito: o mais autonomo do espectro reprova igual, porque o modo afrouxa a pausa e nunca a verificacao.",
5
+ "precisa": ["git"],
6
+ "esperado": {
7
+ "modo": "auto",
8
+ "verifyOk": false,
9
+ "motivos": ["claims.failed"],
10
+ "claimsReprovadas": 2
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "id": "fx-happy",
3
+ "sobre": "O ciclo que funciona: thread aberta no modo do pedido, fase montada com prompt gravado e hash, e claim que passa na reexecucao no HEAD real.",
4
+ "porque": "Um corpus que so tem canario de falha nao percebe quando o caminho feliz para de funcionar. Este e o unico que reprova se o produto deixar de fazer o basico.",
5
+ "precisa": ["git"],
6
+ "esperado": {
7
+ "slug": "evl-checkout-f12",
8
+ "modo": "ork",
9
+ "pausas": 5,
10
+ "promptGravado": true,
11
+ "promptSha256Hex": true,
12
+ "despachoBloqueado": false,
13
+ "verifyOk": true,
14
+ "motivos": []
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "fx-schema-drift",
3
+ "sobre": "Seis mutacoes do MASTER log valido: contrato trocado sem trocar a versao, score fora da escala, classe de falha inventada, fase fora do ciclo canonico, justificativa vazia e evidencia ausente.",
4
+ "porque": "O MASTER log e contrato publico congelado (ork.master-log/v1). Se ele aceitar mutacao em silencio, a telemetria de conducao deixa de ser comparavel entre threads e o score vira opiniao com formato de dado. O canario le a mesma fixture b2-master-log que a suite ja usa: uma fonte, dois consumidores.",
5
+ "precisa": [],
6
+ "esperado": {
7
+ "validoPassa": true,
8
+ "contratoTrocado": true,
9
+ "scoreForaDaEscala": true,
10
+ "classeInventada": true,
11
+ "faseForaDoCiclo": true,
12
+ "justificativaVazia": true,
13
+ "evidenciaAusente": true
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "fx-stale-base",
3
+ "sobre": "A branch base recebe um commit depois de a thread carimbar a sua base. A auditoria da worktree, que passava, passa a reprovar com a correcao acionavel.",
4
+ "porque": "Base que anda embaixo de uma thread longa e a classe de falha `base-avancou` do POSTMORTEM. Sem deteccao, o CHECK aprova um diff contra um mundo que nao existe mais e o merge descobre isso no pior momento.",
5
+ "precisa": ["git"],
6
+ "esperado": {
7
+ "auditavaAntes": true,
8
+ "auditaDepois": false,
9
+ "checkDaBase": "fail",
10
+ "correcao": "ork worktree sync evl-baseandou"
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "id": "fx-wiki-destroy",
3
+ "sobre": "O agente tenta apagar trabalho alheio em massa: git add -A, rm -rf com alvo variavel, reset --hard e force push. O guard PreToolUse do host nega os quatro, e a policy do nucleo bloqueia a entrega em cima da propria base.",
4
+ "porque": "Duas defesas independentes, de proposito. O guard e mecanico e mora no host: ele reconhece a forma do comando e nao consulta ledger nenhum. A policy mora no nucleo e reprova a entrega. Uma defesa so falha quando o host muda; duas exigem que as duas falhem juntas.",
5
+ "precisa": [],
6
+ "esperado": {
7
+ "gitAddEmMassa": "deny",
8
+ "codigoDoGitAdd": 2,
9
+ "removeRecursivo": "deny",
10
+ "resetDestrutivo": "deny",
11
+ "forcePush": "deny",
12
+ "comandoDoOrkPassa": "allow",
13
+ "addNomeadoPassa": "allow",
14
+ "policyDoShipBloqueia": 1
15
+ }
16
+ }
@@ -0,0 +1,22 @@
1
+ # fixtures/superficie-de-rede
2
+
3
+ Tres servidores DELIBERADAMENTE vulneraveis (Express, FastAPI e gin), usados como alvo real
4
+ da varredura deterministica de superficie de ataque de rede do pack `security-privacy`
5
+ (regras SP8..SP12, extensao do bloco B5).
6
+
7
+ Nao sao codigo de producao, nao entram em build nenhum e nao sao importados por nada. Eles
8
+ existem para que `ork audit surface` tenha, dentro do proprio repositorio, uma superficie
9
+ com defeito conhecido para achar:
10
+
11
+ ```bash
12
+ node core/dist/index.js audit surface eval/fixtures/superficie-de-rede
13
+ ```
14
+
15
+ | Arquivo | O que ele publica de errado |
16
+ |---|---|
17
+ | `api-express.js` | CORS global com credenciais (SP11), console de admin e swagger abertos (SP9), rota de dado pessoal sem guarda (SP8) e sem esquema (SP12), `/login` sem limite de taxa (SP10) |
18
+ | `api_fastapi.py` | metricas internas expostas (SP9), criacao de pedido sem guarda (SP8) e sem modelo de entrada (SP12) |
19
+ | `api_gin.go` | `pprof` aberto (SP9), cobranca alterada por payload cru (SP8, SP12) |
20
+
21
+ Corrigir estes arquivos NAO e o objetivo: eles sao o gabarito. Se a varredura parar de achar
22
+ o que esta na tabela acima, quem regrediu foi a varredura.
@@ -0,0 +1,30 @@
1
+ // Fixture DELIBERADAMENTE vulneravel: a superficie de rede que o pack security-privacy
2
+ // (SP8..SP12) precisa enxergar. Nao e codigo de producao e nao entra em nenhum build.
3
+ const express = require('express');
4
+ const cors = require('cors');
5
+
6
+ const app = express();
7
+
8
+ // SP11: origem global com credenciais, num servico que serve rota de usuario.
9
+ app.use(cors({ origin: '*', credentials: true }));
10
+
11
+ // SP9: console de administracao publicado sem restricao de rede nem oAuth.
12
+ app.get('/admin/usuarios', (req, res) => {
13
+ res.json(listarUsuarios());
14
+ });
15
+
16
+ // SP9: documentacao de API aberta, que entrega o mapa inteiro da superficie.
17
+ app.get('/swagger.json', (req, res) => res.json(especificacao()));
18
+
19
+ // SP8 + SP12: rota de dado pessoal sem guarda e sem esquema de entrada.
20
+ app.post('/usuarios/:id/endereco', (req, res) => {
21
+ salvarEndereco(req.params.id, req.body);
22
+ res.status(204).end();
23
+ });
24
+
25
+ // SP10: caminho classico de forca bruta, sem limite de taxa.
26
+ app.post('/login', (req, res) => {
27
+ res.json(autenticar(req.body.email, req.body.senha));
28
+ });
29
+
30
+ app.listen(3000);
@@ -0,0 +1,17 @@
1
+ # Fixture DELIBERADAMENTE vulneravel (SP8..SP12), sem valor de producao.
2
+ from fastapi import FastAPI, Request
3
+
4
+ app = FastAPI()
5
+
6
+
7
+ # SP9: metricas de cluster expostas sem restricao de rede.
8
+ @app.get("/internal/metrics")
9
+ async def metricas():
10
+ return coletar_metricas()
11
+
12
+
13
+ # SP8 + SP12: cria pedido a partir do corpo cru, sem guarda e sem modelo de entrada.
14
+ @app.post("/pedidos")
15
+ async def criar_pedido(request: Request):
16
+ corpo = await request.json()
17
+ return salvar_pedido(corpo)
@@ -0,0 +1,18 @@
1
+ // Fixture DELIBERADAMENTE vulneravel (SP8..SP12), sem valor de producao.
2
+ package exemplo
3
+
4
+ import "github.com/gin-gonic/gin"
5
+
6
+ func Rotas() *gin.Engine {
7
+ r := gin.Default()
8
+
9
+ // SP9: pprof aberto em producao entrega perfil e memoria do processo.
10
+ r.GET("/debug/pprof", handlerPprof)
11
+
12
+ // SP8 + SP12: cobranca alterada por payload cru, sem guarda e sem binding.
13
+ r.POST("/clientes/:id/cobranca", func(c *gin.Context) {
14
+ atualizarCobranca(c.Param("id"), lerCorpo(c))
15
+ })
16
+
17
+ return r
18
+ }
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@orkastery/cli",
3
+ "version": "0.2.0",
4
+ "description": "Nucleo CLI deterministico do Orkastery: conduz N looping threads em fases GOAL..MASTER, sem LLM embutido",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/Orkastery/orkastery#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Orkastery/orkastery.git",
10
+ "directory": "core"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/Orkastery/orkastery/issues"
14
+ },
15
+ "keywords": [
16
+ "orkastery",
17
+ "ork",
18
+ "orquestracao",
19
+ "agentes",
20
+ "looping-threads",
21
+ "cli",
22
+ "ledger",
23
+ "hitl"
24
+ ],
25
+ "bin": {
26
+ "ork": "dist/index.js"
27
+ },
28
+ "main": "dist/index.js",
29
+ "files": [
30
+ "dist/",
31
+ "skills/",
32
+ "references/",
33
+ "eval/",
34
+ "adapters/",
35
+ "README.md",
36
+ "LICENSE"
37
+ ],
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.json && chmod +x dist/index.js",
43
+ "build:test": "tsc -p tsconfig.test.json",
44
+ "test": "npm run build && npm run build:test && node --test \"dist-test/test/**/*.test.js\"",
45
+ "ork": "node dist/index.js",
46
+ "prepack": "npm run build && node scripts/preparar-pacote.js",
47
+ "postpack": "node scripts/preparar-pacote.js --limpar"
48
+ },
49
+ "engines": {
50
+ "node": ">=20"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.10.2",
54
+ "typescript": "^5.9.2"
55
+ }
56
+ }
@@ -0,0 +1,25 @@
1
+ # references/
2
+
3
+ Checklists normativas citadas **por numero de item** pelas skills, pelos adaptadores e pelo
4
+ humano, para que quem escreve `DoD 4` ou `SEC 5` e quem le resolvam a mesma linha.
5
+
6
+ | Arquivo | Citado como | O que fixa |
7
+ |---|---|---|
8
+ | [definition-of-done.md](definition-of-done.md) | `DoD 4` | As condicoes que uma entrega cumpre, por tarefa, por thread, por merge e por log |
9
+ | [code-review-axes.md](code-review-axes.md) | `REVIEW 7` | Os 5 eixos de review e a regra que categoriza todo achado |
10
+ | [security-checklist.md](security-checklist.md) | `SEC 5` | A superficie da auditoria e a condicao dura de zero bloqueadores |
11
+ | [testing-patterns.md](testing-patterns.md) | `TEST 3` | O que uma suite precisa provar e como uma suite verde e ganha honestamente |
12
+ | [performance-checklist.md](performance-checklist.md) | `PERF 2` | A auditoria condicional, seu contrato de dispensa e a honestidade de medicao |
13
+
14
+ Tres regras governam as cinco.
15
+
16
+ 1. **Elas elevam verificacao que ja existe** no nucleo (`core/`) e nas skills finas, com o mesmo
17
+ significado. Divergencia entre uma checklist e o comando `ork` que a executa e defeito, nunca
18
+ segunda opiniao; onde aparecer, o nucleo vence.
19
+ 2. **Um item so e gate quando esta maquina consegue roda-lo.** Tudo que depende de ferramenta
20
+ ausente vai para a secao `Recomendacoes` dizendo isso. Checklist que exige evidencia que
21
+ ninguem consegue produzir e mentira com cara de rigor. O que nao da para medir e publicado
22
+ como `unavailable`, nunca como zero.
23
+ 3. **Numeracao e append-only** a partir do commit que publica estes arquivos, pela vida da v1.
24
+ Renumerar quebra toda citacao ja escrita e e mudanca de contrato publico versionado: exige
25
+ decisao de classe 2 ratificada, a mesma regra que o contrato do MASTER log tomou ao congelar.
@@ -0,0 +1,82 @@
1
+ # Code Review Axes
2
+
3
+ Os cinco eixos que o CHECK percorre e a regra que categoriza todo achado. Nenhum eixo e opcional:
4
+ um eixo sem achado sai como "nenhum" explicito, porque silencio nao e evidencia de que se olhou.
5
+ Os itens sao numerados uma unica vez no arquivo inteiro. Cite um item como `REVIEW 7`.
6
+
7
+ **Fontes:** `core/src/verify.ts`, `core/src/gates.ts`, `core/src/claims.ts`,
8
+ [definition-of-done.md](definition-of-done.md), [security-checklist.md](security-checklist.md).
9
+
10
+ ```mermaid
11
+ flowchart TB
12
+ D["diff da thread contra a base carimbada"] --> A1["REVIEW 1 a 4<br/>correcao"]
13
+ D --> A2["REVIEW 5 e 6<br/>seguranca"]
14
+ D --> A3["REVIEW 7 e 8<br/>performance"]
15
+ D --> A4["REVIEW 9 a 11<br/>manutenibilidade"]
16
+ D --> A5["REVIEW 12<br/>estilo"]
17
+ A1 --> C{"categoria de cada achado"}
18
+ A2 --> C
19
+ A3 --> C
20
+ A4 --> C
21
+ A5 --> C
22
+ C -->|"bloqueador"| B["veredito BLOQUEADO"]
23
+ C -->|"aviso aceito com registro"| P["veredito PASSOU"]
24
+ C -->|"sugestao"| P
25
+ ```
26
+
27
+ ## Eixo 1, correcao
28
+
29
+ | # | Verificacao | Como se comprova |
30
+ |---|---|---|
31
+ | 1 | O codigo faz o que o PLAN disse que faria, e o que ele nao faz esta dito. Diferenca entre o entregue e o planejado e achado, mesmo quando o entregue e melhor. | Diff contra as tarefas do PLAN. |
32
+ | 2 | Casos de borda declarados no PLAN tem teste ou tem uma linha dizendo por que nao tem. | Suite reexecutada por `ork verify <thread>`. |
33
+ | 3 | Erro nao e engolido: todo caminho de falha ou trata, ou propaga com contexto, ou falha alto. Captura vazia e bloqueador. | Leitura do diff, apoiada pelos testes de caminho de falha. |
34
+ | 4 | Nenhum arquivo ou teste citado pelo runtime falta no diff. Citacao sem lastro e alucinacao, categorizada bloqueador. | `ork verify <thread>`, que reexecuta as claims no HEAD real. |
35
+
36
+ ## Eixo 2, seguranca
37
+
38
+ | # | Verificacao | Como se comprova |
39
+ |---|---|---|
40
+ | 5 | A lista de [security-checklist.md](security-checklist.md) foi percorrida no escopo do diff e do historico da branch, e o resultado esta no relatorio. | A secao de seguranca do relatorio de CHECK, citando `SEC n` por achado. |
41
+ | 6 | Zero bloqueadores de seguranca. Esta e condicao dura: com um bloqueador aberto o veredito e BLOQUEADO, em qualquer modo de conducao, inclusive `#Auto`. | O veredito do relatorio contra a contagem de bloqueadores. O modo afrouxa a pausa, nunca a verificacao. |
42
+
43
+ ## Eixo 3, performance
44
+
45
+ | # | Verificacao | Como se comprova |
46
+ |---|---|---|
47
+ | 7 | Custo assintotico das estruturas tocadas foi olhado quando o diff mexe em laco sobre colecao que cresce com o uso, e o achado traz a ordem de grandeza, nao um adjetivo. | Leitura do diff, com o numero medido quando ha como medir. |
48
+ | 8 | Regressao de performance so e afirmada com medida. Sem medida, o item sai `unavailable` com o motivo, nunca como suposicao apresentada como dado. | [performance-checklist.md](performance-checklist.md) e a origem declarada de cada numero. |
49
+
50
+ ## Eixo 4, manutenibilidade
51
+
52
+ | # | Verificacao | Como se comprova |
53
+ |---|---|---|
54
+ | 9 | Nomes dizem o que a coisa e, e o codigo novo se parece com o codigo em volta: mesma densidade de comentario, mesmo idioma, mesmo idioma de nomes. Codigo que precisa de tour guiado para ser lido e achado. | Leitura do diff contra os arquivos vizinhos. |
55
+ | 10 | Duplicacao introduzida foi apontada com o lugar de onde ela deveria vir. Apontar duplicacao sem apontar o dono e sugestao vazia. | Diff contra o modulo que ja resolve o problema. |
56
+ | 11 | O diff nao carrega mudanca fora do escopo da thread. Melhoria oportunista sem tarefa e scope creep, e vira proposta, nunca commit escondido. | `git show --stat` contra os `touch_paths` do PLAN. |
57
+
58
+ ## Eixo 5, estilo
59
+
60
+ | # | Verificacao | Como se comprova |
61
+ |---|---|---|
62
+ | 12 | Lint e formatador do projeto passam, e o que eles nao cobrem segue a convencao do arquivo vizinho. Estilo nunca vira bloqueador sozinho: ele e sugestao, exceto quando quebra ferramenta do projeto, e ai ja e correcao. | Os comandos de `verify:` do manifesto. |
63
+
64
+ ## A regra de categorizacao
65
+
66
+ Todo achado, em qualquer eixo, sai com exatamente uma categoria.
67
+
68
+ - **Bloqueador**: impede o merge. Correcao errada, alucinacao com lastro provado, bloqueador de
69
+ seguranca, quebra de contrato publico sem ratificacao.
70
+ - **Aviso**: passa apenas com registro nominal de quem aceitou e por que. Aviso aceito sem registro
71
+ e o mesmo que aviso escondido.
72
+ - **Sugestao**: nao segura nada e nao exige registro; vira proposta de roadmap quando importa.
73
+
74
+ Achado sem categoria nao existe: e opiniao. E categoria nao se negocia por pressa: um bloqueador
75
+ rebaixado para aviso porque a entrega estava perto e o defeito de processo que este eixo existe
76
+ para tornar visivel.
77
+
78
+ ## Recomendacoes (nao sao gate nesta maquina)
79
+
80
+ - Analise estatica alem do lint (complexidade ciclomatica, deteccao de duplicacao por ferramenta):
81
+ este repositorio nao tem essas ferramentas, entao os eixos 4 e 5 sao percorridos por leitura e o
82
+ relatorio diz isso, em vez de reportar um numero que ninguem produziu.
@@ -0,0 +1,74 @@
1
+ # Definition of Done
2
+
3
+ As condicoes universais que uma entrega cumpre antes de ser chamada de pronta. Consolida os gates
4
+ que o nucleo `ork` ja executa e nao inventa doutrina propria. Os itens sao numerados uma unica vez
5
+ no arquivo inteiro, para que um reviewer escreva um numero e todo humano e toda skill resolvam a
6
+ mesma linha. Cite um item como `DoD 4`.
7
+
8
+ **Fontes:** `core/src/phase.ts` (contrato das fases), `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` (bloco B3: retry tipado, GO-FIX/CHECK-REVERIFY e fila de rate limit).
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
+ ## Toda tarefa, antes de o GO chamar de pronta
24
+
25
+ | # | Verificacao | Como se comprova |
26
+ |---|---|---|
27
+ | 1 | Um commit atomico por tarefa, no maximo cinco arquivos alterados, com a thread e a tarefa na mensagem (exemplo: `ork-checkout T3: extrai o calculo de frete`). | `git log --oneline` e `git show --stat` na branch da thread. Acima de cinco arquivos a tarefa volta ao PLAN para ser fatiada. |
28
+ | 2 | O verify da tarefa declarado no PLAN foi executado e passou. | Rode o comando. Passagem relatada nao e passagem: `ork verify <thread>` reexecuta no HEAD real. |
29
+ | 3 | Verificacao anti-alucinacao: todo arquivo que o runtime citou existe no diff e todo teste que ele citou existe e passa. | Toda alegacao vira `ork claims add ... --verificar "<comando>"`, e `ork verify <thread>` reexecuta. Divergencia sai como motivo tipado `claims.failed`. |
30
+ | 4 | Trabalho dentro da worktree da thread, com a base carimbada no `thread.json`, nunca na arvore principal. | `ork worktree audit <thread>` confere no proprio git e sai diferente de zero se divergir. |
31
+ | 5 | Toda decisao delegada relevante foi registrada no ledger com quem decidiu, com que evidencia e por que. O qualificador carrega peso: formatacao e nome interno tambem sao delegaveis, e exigir evento para cada um deles e escalacao indevida, que a auditoria pesa igual a subclassificacao. | `ork phase list <thread>` sobre o `ledger.jsonl` da thread. |
32
+
33
+ ## Toda thread, antes de o gate de CHECK passar
34
+
35
+ | # | Verificacao | Como se comprova |
36
+ |---|---|---|
37
+ | 6 | A suite completa esta verde, incluindo os comandos de `verify:` do manifesto, e a saude de codigo passa: typecheck, lint e cobertura com origem declarada. | `ork verify <thread>`. Todo numero carrega `runtime_reported`, `estimated` ou `unavailable`; lacuna e publicada como lacuna, nunca como zero. |
38
+ | 7 | A comparacao e contra a baseline gravada antes do GO, separando regressao de divida pre-existente. | `ork verify <thread> --baseline` antes do GO e `ork verify <thread>` depois. Comando que passava na baseline e falha agora sai como `verify.regression`; o que ja falhava antes sai como divida, nao como culpa da thread. |
39
+ | 8 | Os cinco eixos de review (correcao, seguranca, performance, manutenibilidade, estilo) trazem achados ou um "nenhum" explicito, cada um categorizado bloqueador, aviso ou sugestao. | A tabela dos cinco eixos do relatorio de CHECK, conforme [code-review-axes.md](code-review-axes.md). |
40
+ | 9 | A auditoria de seguranca reporta zero bloqueadores, e a auditoria de performance web ou rodou ou declara por que o alvo nao tem superficie web. | As secoes de auditoria do relatorio, conforme [security-checklist.md](security-checklist.md) e [performance-checklist.md](performance-checklist.md). |
41
+ | 10 | Correcoes classificadas com honestidade: tipo A e uma linha ou equivalente, registrada, com as verificacoes afetadas reexecutadas; tipo B devolveu a tarefa ao GO, e esta rodada de CHECK e a reexecucao completa. | `ork fix open <thread>` deriva uma correcao por motivo tipado, com a spec exata e o comando que a julga; `ork fix reverify <thread>` da o veredito POR correcao e RECUSA reexecucao parcial quando ha tipo B. Os eventos `go_fix_opened` e `check_reverify` do ledger contra as contagens do relatorio. Estas contagens medem a qualidade do PLAN e do GO, nao a do reviewer. |
42
+ | 11 | O relatorio esta no diretorio da thread com exatamente um veredito (PASSOU, PRECISA DE MUDANCA, BLOQUEADO), todo aviso aceito tem seu registro, e o gate foi resolvido pelo caminho certo. | `ork gate approve <thread> evidencias --por <quem>` para decisao humana, ou o evento de decisao autonoma do modo, que so um veredito PASSOU pode tomar. Falha de verify, falha anti-alucinacao, qualquer CHECK com correcao tipo B, desvio de envelope, veredito diferente de PASSOU e emergencia sobem sempre para o humano, em qualquer modo. |
43
+
44
+ ## Todo merge, antes de o SHIP fechar
45
+
46
+ | # | Verificacao | Como se comprova |
47
+ |---|---|---|
48
+ | 12 | Guarda de contrato: nada no diff final muda contrato publico versionado (schema de telemetria, contrato de interface, layout de estado, tipos de evento) sem decisao de classe 2 ratificada. | `git diff <base>...HEAD` sobre esses arquivos e o id do gate que ratificou, no ledger. Sem ratificacao nao ha merge. |
49
+ | 13 | O merge passou pela fila serializada, atualizado contra a base mais recente, revalidado por inteiro sempre que a atualizacao trouxe mudanca, com a guarda de `DoD 12` reexecutada contra o diff final. | `ork ship <thread> --para <base>` toma o lease `main-tree`; a atualizacao pode trazer mudanca que toca contrato, entao um veredito calculado antes dela descreve um diff que nao existe mais. |
50
+ | 14 | O push foi provado por comando, nao relatado. | O `ork ship` compara o sha local com `git ls-remote` no remoto e grava `pushVerificado` no ledger. Push relatado sem sha do remoto conta como push nao acontecido. |
51
+ | 15 | Passo irreversivel so acontece com autorizacao do modo: push, merge e delecao exigem a pausa que a #TAG previu ou uma autorizacao antecipada registrada. | `ork gate approve <thread> push --por <quem>`, visivel em `ork phase list <thread>`. |
52
+
53
+ ## Todo fechamento, antes de a thread morrer
54
+
55
+ | # | Verificacao | Como se comprova |
56
+ |---|---|---|
57
+ | 16 | Existe MASTER log valido contra o contrato congelado `ork.master-log/v1`, com POSTMORTEM tipado, classes de falha do catalogo fixo, score inteiro de 0 a 5 e justificativa nao vazia. Uma entrega sem MASTER log nao aconteceu. | `ork master <thread> --score N --justificativa "<texto>"`. O comando recusa score fora da escala, score sem justificativa e classe fora do catalogo, e nao grava nada quando recusa. |
58
+
59
+ ## Toda thread, no seu inicio
60
+
61
+ | # | Verificacao | Como se comprova |
62
+ |---|---|---|
63
+ | 17 | O objetivo do GOAL e verificavel: criterios observaveis (latencia, cobertura, comportamento), nunca adjetivos. Numa demanda de correcao, reproduzir o defeito e criterio obrigatorio. | O GOAL vira claims com comando de verificacao; criterio que nao vira comando nao e criterio. |
64
+ | 18 | As premissas estao escritas. Premissa implicita e a maior fonte de retrabalho e e tratada como defeito de processo, nao como esperteza. | A secao de premissas do GOAL e as claims que as amarram. |
65
+ | 19 | O PLAN traz tarefas com `touch_paths` consultaveis e um verify executavel por tarefa. | O PLAN da thread e os leases `path:<glob>` que ele justifica. |
66
+ | 20 | As decisoes D1..Dn tem domicilio unico e ficam travadas depois de decididas; reabrir e decisao nova, com registro, nunca edicao silenciosa. | O ledger da thread, onde a decisao aparece com quem decidiu e quando. |
67
+
68
+ ## Recomendacoes (nao sao gate nesta maquina)
69
+
70
+ - Cobertura de teste com numero: este repositorio nao tem ferramenta de cobertura instalada, entao
71
+ a cobertura e reportada `unavailable` em vez de estimada.
72
+ - Auditoria de dependencia por ferramenta: `npm audit` roda onde ha dependencia declarada; o nucleo
73
+ `ork` tem apenas dependencias de desenvolvimento, e isso e dito no relatorio em vez de virar um
74
+ zero conveniente.
@@ -0,0 +1,53 @@
1
+ # Performance Checklist
2
+
3
+ A auditoria condicional: ela roda quando o alvo tem superficie que sofre com latencia, e quando nao
4
+ tem, ela e dispensada por um contrato escrito, nunca por esquecimento. Os itens sao numerados uma
5
+ unica vez no arquivo inteiro. Cite um item como `PERF 2`.
6
+
7
+ **Fontes:** [code-review-axes.md](code-review-axes.md) (eixo 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
+ ## O contrato de dispensa
19
+
20
+ | # | Verificacao | Como se comprova |
21
+ |---|---|---|
22
+ | 1 | Quando o alvo nao tem superficie web nem caminho sensivel a latencia, a auditoria e dispensada com uma linha dizendo qual e o alvo e por que ele nao tem essa superficie. Dispensa escrita e resultado; auditoria ausente sem linha nenhuma e lacuna. | A secao de performance do relatorio de CHECK, que existe sempre, mesmo quando o conteudo dela e a dispensa. |
23
+
24
+ ## Medir antes de afirmar
25
+
26
+ | # | Verificacao | Como se comprova |
27
+ |---|---|---|
28
+ | 2 | Toda afirmacao de performance traz numero, unidade e como o numero foi obtido. "Ficou mais rapido" sem medida e opiniao, e opiniao nao passa em gate. | A tabela de medidas do relatorio, com o comando que produziu cada numero. |
29
+ | 3 | Ha medida antes e depois, na mesma maquina e no mesmo regime. Comparar medida de maquinas diferentes e comparar maquinas, nao codigo. | As duas execucoes, com a maquina e o regime declarados. |
30
+ | 4 | A medida foi repetida o suficiente para separar sinal de ruido, e a variacao esta dita. Uma unica execucao vira `estimated`, nunca `runtime_reported`. | O numero de repeticoes no relatorio. |
31
+ | 5 | O caminho medido e o caminho do usuario, nao o microbenchmark conveniente. Ganho em funcao que ninguem chama no caminho quente e sugestao, nao resultado. | O trecho do fluxo real que a medida cobre. |
32
+ | 6 | Regressao de performance detectada e categorizada como qualquer outro achado: bloqueador, aviso com registro, ou sugestao. | [code-review-axes.md](code-review-axes.md), regra de categorizacao. |
33
+
34
+ ## Custo assintotico e recurso
35
+
36
+ | # | Verificacao | Como se comprova |
37
+ |---|---|---|
38
+ | 7 | Laco sobre colecao que cresce com o uso foi olhado, e a ordem de grandeza esta dita. Quadratico escondido em dado pequeno e defeito com data marcada. | Leitura do diff nos pontos que iteram sobre estado acumulado. |
39
+ | 8 | Trabalho repetido dentro de laco (leitura de arquivo, chamada de processo, parse do mesmo dado) foi apontado, ou dito que nao ha. No `ork`, ler o ledger inteiro por evento seria exatamente esse defeito. | Leitura do diff contra os pontos de I/O. |
40
+
41
+ ## Honestidade de medicao
42
+
43
+ | # | Verificacao | Como se comprova |
44
+ |---|---|---|
45
+ | 9 | Todo numero carrega a origem: `runtime_reported`, `estimated` ou `unavailable`. E a mesma disciplina do gate de tokens do `ork`, que prefere dizer "nao medivel" a inventar uma ocupacao de janela. | A origem colada em cada numero do relatorio. |
46
+ | 10 | O que nao foi medido aparece como `unavailable` com o motivo, nunca como zero, nunca como ausencia silenciosa. Lacuna publicada e lacuna; lacuna escondida vira numero falso na proxima leitura. | A secao de metricas do relatorio. |
47
+
48
+ ## Recomendacoes (nao sao gate nesta maquina)
49
+
50
+ - Ferramenta de profile de navegador (Lighthouse, traces de CPU): nao instalada aqui. Auditoria de
51
+ performance web de alvo com superficie web sai `unavailable` com o motivo enquanto for assim.
52
+ - Benchmark continuo com historico: fora do alcance desta maquina; comparacao antes e depois e
53
+ feita na propria thread, com `PERF 3` explicito.