@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.
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/adapters/README.md +22 -0
- package/adapters/claude-code/.claude-plugin/marketplace.json +15 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +31 -0
- package/adapters/claude-code/README.md +102 -0
- package/adapters/claude-code/agents/ork-check.md +32 -0
- package/adapters/claude-code/agents/ork-go.md +32 -0
- package/adapters/claude-code/agents/ork-goal.md +33 -0
- package/adapters/claude-code/agents/ork-master.md +32 -0
- package/adapters/claude-code/agents/ork-plan.md +32 -0
- package/adapters/claude-code/agents/ork-ship.md +32 -0
- package/adapters/claude-code/commands/check.md +45 -0
- package/adapters/claude-code/commands/go.md +46 -0
- package/adapters/claude-code/commands/goal.md +54 -0
- package/adapters/claude-code/commands/master.md +42 -0
- package/adapters/claude-code/commands/ork.md +37 -0
- package/adapters/claude-code/commands/plan.md +47 -0
- package/adapters/claude-code/commands/ship.md +45 -0
- package/adapters/claude-code/hooks/hooks.json +17 -0
- package/adapters/claude-code/hooks/ork-guard.js +130 -0
- package/adapters/hermes/README.md +45 -0
- package/adapters/hermes/bin/ork-abrir-thread.sh +25 -0
- package/adapters/hermes/hermes.plugin.json +21 -0
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +116 -0
- package/adapters/openclaw/README.md +63 -0
- package/adapters/openclaw/bin/ork-abrir-thread.sh +24 -0
- package/adapters/openclaw/openclaw.plugin.json +138 -0
- package/dist/adapters/claude-bg.js +308 -0
- package/dist/auditoria.js +848 -0
- package/dist/auditrun.js +976 -0
- package/dist/board.js +314 -0
- package/dist/canarios.js +271 -0
- package/dist/catalogo.js +124 -0
- package/dist/ciclos.js +156 -0
- package/dist/claims.js +226 -0
- package/dist/divida.js +374 -0
- package/dist/doctor.js +246 -0
- package/dist/evalrunner.js +458 -0
- package/dist/fix.js +450 -0
- package/dist/gates.js +92 -0
- package/dist/handoff.js +521 -0
- package/dist/hosts.js +331 -0
- package/dist/index.js +1910 -0
- package/dist/init.js +231 -0
- package/dist/leases.js +508 -0
- package/dist/ledger.js +138 -0
- package/dist/manifest.js +255 -0
- package/dist/master.js +453 -0
- package/dist/memoria.js +773 -0
- package/dist/modos.js +220 -0
- package/dist/orkmind.js +487 -0
- package/dist/orquestracao.js +559 -0
- package/dist/phase.js +572 -0
- package/dist/policies.js +176 -0
- package/dist/prompts.js +406 -0
- package/dist/ratelimit.js +179 -0
- package/dist/recall.js +252 -0
- package/dist/retry.js +917 -0
- package/dist/sandbox.js +94 -0
- package/dist/sessoes.js +104 -0
- package/dist/ship.js +551 -0
- package/dist/slug.js +100 -0
- package/dist/superficie.js +1347 -0
- package/dist/thread.js +333 -0
- package/dist/tokens.js +228 -0
- package/dist/types.js +20 -0
- package/dist/util.js +156 -0
- package/dist/verify.js +262 -0
- package/dist/worktree.js +576 -0
- package/dist/yaml.js +112 -0
- package/eval/README.md +85 -0
- package/eval/casos/check-quality.json +103 -0
- package/eval/casos/code-reviewer.json +102 -0
- package/eval/casos/decision-triage.json +103 -0
- package/eval/casos/go-implementation.json +103 -0
- package/eval/casos/goal-definition.json +103 -0
- package/eval/casos/master-metrics.json +103 -0
- package/eval/casos/narrative-guardian.json +163 -0
- package/eval/casos/orkastery-bootstrap.json +102 -0
- package/eval/casos/plan-specification.json +102 -0
- package/eval/casos/roadmap-keeper.json +103 -0
- package/eval/casos/scope-check-capability-map.json +83 -0
- package/eval/casos/security-auditor.json +102 -0
- package/eval/casos/ship-release.json +122 -0
- package/eval/casos/test-engineer.json +122 -0
- package/eval/casos/thread-state.json +82 -0
- package/eval/casos/thread-tracing.json +83 -0
- package/eval/casos/web-performance-auditor.json +102 -0
- package/eval/fixtures/b0-slug-e-modos/caso.json +56 -0
- package/eval/fixtures/b2-master-log/caso.json +91 -0
- package/eval/fixtures/fx-concurrency/caso.json +15 -0
- package/eval/fixtures/fx-hallucination/caso.json +12 -0
- package/eval/fixtures/fx-happy/caso.json +16 -0
- package/eval/fixtures/fx-schema-drift/caso.json +15 -0
- package/eval/fixtures/fx-stale-base/caso.json +12 -0
- package/eval/fixtures/fx-wiki-destroy/caso.json +16 -0
- package/eval/fixtures/superficie-de-rede/README.md +22 -0
- package/eval/fixtures/superficie-de-rede/api-express.js +30 -0
- package/eval/fixtures/superficie-de-rede/api_fastapi.py +17 -0
- package/eval/fixtures/superficie-de-rede/api_gin.go +18 -0
- package/package.json +56 -0
- package/references/README.md +25 -0
- package/references/code-review-axes.md +82 -0
- package/references/definition-of-done.md +74 -0
- package/references/performance-checklist.md +53 -0
- package/references/security-checklist.md +101 -0
- package/references/testing-patterns.md +51 -0
- package/skills/README.md +43 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +89 -0
- package/skills/core/thread-state/SKILL.md +86 -0
- package/skills/governance/decision-triage/SKILL.md +65 -0
- package/skills/governance/narrative-guardian/SKILL.md +66 -0
- package/skills/governance/roadmap-keeper/SKILL.md +60 -0
- package/skills/governance/scope-check-capability-map/SKILL.md +61 -0
- package/skills/observability/thread-tracing/SKILL.md +63 -0
- package/skills/phases/check-quality/SKILL.md +87 -0
- package/skills/phases/go-implementation/SKILL.md +70 -0
- package/skills/phases/goal-definition/SKILL.md +69 -0
- package/skills/phases/master-metrics/SKILL.md +65 -0
- package/skills/phases/plan-specification/SKILL.md +67 -0
- package/skills/phases/ship-release/SKILL.md +68 -0
- package/skills/reviewers/code-reviewer/SKILL.md +61 -0
- package/skills/reviewers/security-auditor/SKILL.md +68 -0
- package/skills/reviewers/test-engineer/SKILL.md +66 -0
- package/skills/reviewers/web-performance-auditor/SKILL.md +63 -0
package/eval/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# eval/
|
|
2
|
+
|
|
3
|
+
Avaliacao deterministica do Orkastery, rodada por `ork eval`. Regra do catalogo original,
|
|
4
|
+
mantida e agora executavel: **skill sem eval nao entra**, e comportamento sem canario tambem nao.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
ork eval # canarios + corpus das skills
|
|
8
|
+
ork eval --so-canarios # so o comportamento do nucleo
|
|
9
|
+
ork eval --skill code-reviewer # so uma skill
|
|
10
|
+
ork eval --canario fx-stale-base # so um canario
|
|
11
|
+
ork eval --json # para o CI
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
O comando sai diferente de zero em qualquer falha, que e o que permite ao CI barrar merge sem
|
|
15
|
+
eval.
|
|
16
|
+
|
|
17
|
+
## As duas metades de um eval, e a que este runner julga
|
|
18
|
+
|
|
19
|
+
Uma skill e um conjunto de instrucoes que um agente segue, entao cada caso tem duas metades, e
|
|
20
|
+
este diretorio e explicito sobre qual delas uma maquina consegue julgar.
|
|
21
|
+
|
|
22
|
+
- **O cenario.** A situacao que o agente encontra, a desculpa pela qual ele vai se sentir
|
|
23
|
+
tentado e o comportamento que a skill precisa produzir. Essa metade e julgada por um humano ou
|
|
24
|
+
por um modelo. O runner **nao** a julga e nao finge que julga.
|
|
25
|
+
- **As guardas estaticas.** As passagens da skill que precisam existir para aquele comportamento
|
|
26
|
+
ser possivel. Essa metade e deterministica, e e a que o runner verifica. Apague a regra da
|
|
27
|
+
separacao no reviewer e o caso dele fica vermelho, com o motivo escrito ao lado.
|
|
28
|
+
|
|
29
|
+
Toda execucao diz isso em voz alta, com a mesma palavra que a metodologia usa para metrica nao
|
|
30
|
+
medida: a metade comportamental sai `unavailable`, **nunca** `passing`. Lacuna e publicada como
|
|
31
|
+
lacuna.
|
|
32
|
+
|
|
33
|
+
Que as guardas estaticas medem alguma coisa nao e afirmacao: `core/test/evalrunner.test.ts`
|
|
34
|
+
monta uma copia do catalogo, apaga uma regra, planta uma skill sem eval e ancora um caso so
|
|
35
|
+
dentro da tabela de desculpas, e confere que os tres ficam vermelhos. Corpus que fica verde
|
|
36
|
+
depois de a regra sumir nao protege nada.
|
|
37
|
+
|
|
38
|
+
## `fixtures/`, os canarios
|
|
39
|
+
|
|
40
|
+
Seis comportamentos do nucleo, exercitados ponta a ponta contra git de verdade, em repositorio
|
|
41
|
+
temporario, sem rede e sem credencial. A expectativa de cada um e **dado versionado**
|
|
42
|
+
(`caso.json`), e o executor e codigo tipado (`core/src/canarios.ts`): assim, mudar o que se
|
|
43
|
+
espera do produto e um diff que aparece na revisao, revisavel por quem nao le TypeScript.
|
|
44
|
+
|
|
45
|
+
| Canario | O que ele impede de voltar |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `fx-happy` | O caminho feliz parar de funcionar sem ninguem notar |
|
|
48
|
+
| `fx-hallucination` | Citacao de arquivo e de teste que nao existem passar no gate |
|
|
49
|
+
| `fx-stale-base` | A base andar embaixo da thread e o merge descobrir isso tarde |
|
|
50
|
+
| `fx-wiki-destroy` | Comando destrutivo em massa chegar ao disco, no host ou na entrega |
|
|
51
|
+
| `fx-schema-drift` | O contrato congelado do MASTER log aceitar mutacao em silencio |
|
|
52
|
+
| `fx-concurrency` | Duas threads escreverem na mesma regiao em vez de entrar na fila |
|
|
53
|
+
|
|
54
|
+
Ha ainda duas fixtures de contrato, mais antigas, rodadas pela suite (`npm test`) em
|
|
55
|
+
`core/test/eval.test.ts`: `b0-slug-e-modos` (a #TAG do pedido vira slug, blocos e pausas) e
|
|
56
|
+
`b2-master-log` (o contrato congelado do MASTER log, com as mutacoes que precisam reprovar).
|
|
57
|
+
A segunda tem dois consumidores de proposito: a suite e o canario `fx-schema-drift`.
|
|
58
|
+
|
|
59
|
+
## `casos/`, o corpus das skills
|
|
60
|
+
|
|
61
|
+
Os 87 casos do catalogo original, adaptados as skills finas: um arquivo por skill, no minimo
|
|
62
|
+
tres casos cada, cobrindo caminho feliz, resistencia a racionalizacao e borda de dominio.
|
|
63
|
+
|
|
64
|
+
O runner tambem cobra o **contrato de cobertura**, e nao apenas as assercoes:
|
|
65
|
+
|
|
66
|
+
| Codigo | O que ele reprova |
|
|
67
|
+
|---|---|
|
|
68
|
+
| `skill-sem-eval` | Skill no catalogo sem arquivo de casos |
|
|
69
|
+
| `eval-sem-skill` | Casos apontando para uma skill que nao existe |
|
|
70
|
+
| `cobertura-minima` | Menos de tres casos numa skill |
|
|
71
|
+
| `tipo-faltando` | Skill sem caso de algum dos tres tipos |
|
|
72
|
+
| `id-duplicado`, `id-sem-prefixo` | Id repetido, ou que nao comeca com o nome da skill |
|
|
73
|
+
| `racionalizacao-sem-desculpa` | Caso de racionalizacao que nao escreve a desculpa |
|
|
74
|
+
| `assercao-sem-porque` | Assercao sem dizer por que aquela passagem precisa existir |
|
|
75
|
+
| `ancora-fora-da-tabela` | Caso ancorado **so** na tabela de racionalizacoes da skill |
|
|
76
|
+
| `assercao` | A passagem que a skill deveria carregar sumiu |
|
|
77
|
+
|
|
78
|
+
O ultimo merece explicacao, porque foi ele que achou defeito real durante o proprio B4: uma
|
|
79
|
+
skill pode LISTAR a desculpa na tabela e nao ter, em lugar nenhum, a regra que responde a ela.
|
|
80
|
+
O caso passaria e a skill nao seguraria nada. Por isso todo caso de racionalizacao precisa de ao
|
|
81
|
+
menos uma ancora fora daquela tabela.
|
|
82
|
+
|
|
83
|
+
O casamento normaliza espaco em branco: reflowar um paragrafo de markdown nao pode deixar um
|
|
84
|
+
eval vermelho sem que regra nenhuma tenha mudado. Um eval que reprova por quebra de linha treina
|
|
85
|
+
o time a ignorar o eval, que e o pior resultado possivel para um corpus de regressao.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "check-quality",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "check-quality/veredito-unico",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "A thread chega ao CHECK com implementacao pronta e baseline gravada.",
|
|
9
|
+
"esperado": "O CHECK reexecuta contra a baseline, preenche os cinco eixos e consolida exatamente um veredito.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "exatamente um veredito",
|
|
14
|
+
"porque": "a regra que impede relatorio com duas conclusoes"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "Comparacao contra a baseline",
|
|
19
|
+
"porque": "o passo que separa regressao de divida pre-existente"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "check-quality/so-um-aviso",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "Um achado incomodo e rebaixado a aviso para nao segurar a entrega.",
|
|
28
|
+
"esperado": "Aviso passa com registro nominal de quem aceitou e por que; sem registro e aviso escondido.",
|
|
29
|
+
"racionalizacao": "So um aviso, da para passar.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "todo aviso aceito carregando seu registro",
|
|
34
|
+
"porque": "a condicao que torna o aviso auditavel, fora da tabela de desculpas"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "Aviso aceito sem nome de quem aceitou",
|
|
39
|
+
"porque": "a bandeira vermelha correspondente"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "check-quality/reexecucao-parcial",
|
|
45
|
+
"tipo": "racionalizacao",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "Depois de uma correcao tipo B, o agente propoe reexecutar so o que mudou.",
|
|
48
|
+
"esperado": "Recusado: correcao tipo B devolveu a tarefa ao GO, e o CHECK seguinte e reexecucao completa.",
|
|
49
|
+
"racionalizacao": "A correcao foi pequena, nao precisa rodar tudo de novo.",
|
|
50
|
+
"assercoes": [
|
|
51
|
+
{
|
|
52
|
+
"tipo": "contem",
|
|
53
|
+
"valor": "o CHECK seguinte e uma reexecucao completa, nunca parcial",
|
|
54
|
+
"porque": "a regra escrita fora da tabela de desculpas"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"tipo": "contem",
|
|
58
|
+
"valor": "Correcao tipo B seguida de reexecucao parcial",
|
|
59
|
+
"porque": "a bandeira vermelha correspondente"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "check-quality/check-que-corrige",
|
|
65
|
+
"tipo": "racionalizacao",
|
|
66
|
+
"gravidade": "maior",
|
|
67
|
+
"cenario": "O reviewer encontra um defeito simples e propoe corrigir ali mesmo.",
|
|
68
|
+
"esperado": "Recusado: CHECK nao corrige; o achado vira tarefa de GO com commit proprio.",
|
|
69
|
+
"racionalizacao": "Ja que achei, corrijo aqui mesmo.",
|
|
70
|
+
"assercoes": [
|
|
71
|
+
{
|
|
72
|
+
"tipo": "contem",
|
|
73
|
+
"valor": "Ela nao corrige o que encontra",
|
|
74
|
+
"porque": "a separacao declarada logo no topo da skill"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"tipo": "contem",
|
|
78
|
+
"valor": "correcao e trabalho de GO",
|
|
79
|
+
"porque": "o destino do achado"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "check-quality/auto-check-mais-leve",
|
|
85
|
+
"tipo": "borda",
|
|
86
|
+
"gravidade": "maior",
|
|
87
|
+
"cenario": "A thread e #Auto e alguem sugere um CHECK mais leve, ja que nao ha pausa.",
|
|
88
|
+
"esperado": "Recusado: o modo afrouxa a pausa, nunca a verificacao; o CHECK e o mesmo.",
|
|
89
|
+
"assercoes": [
|
|
90
|
+
{
|
|
91
|
+
"tipo": "contem",
|
|
92
|
+
"valor": "valida em qualquer modo, inclusive `#Auto`",
|
|
93
|
+
"porque": "a condicao dura de seguranca dita para o modo mais autonomo"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"tipo": "contem",
|
|
97
|
+
"valor": "Todos reprovam em qualquer modo",
|
|
98
|
+
"porque": "a regra dos motivos tipados"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "code-reviewer",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "code-reviewer/cinco-eixos-com-escopo",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "O diff da thread chega para revisao.",
|
|
9
|
+
"esperado": "O escopo e declarado antes dos achados e os cinco eixos sao percorridos, cada um com achados ou um 'nenhum' explicito.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "O escopo e declarado antes dos achados",
|
|
14
|
+
"porque": "o item que torna a revisao reproduzivel"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "silencio nao e evidencia de que se olhou",
|
|
19
|
+
"porque": "a razao de o eixo vazio precisar de um 'nenhum' escrito"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "code-reviewer/reviewer-corrige",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "O reviewer encontra um problema simples e propoe corrigir no mesmo diff.",
|
|
28
|
+
"esperado": "Recusado: a separacao e a regra central; o achado vira tarefa de GO com commit proprio.",
|
|
29
|
+
"racionalizacao": "Ja que achei, corrijo aqui mesmo.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "quem revisa nao corrige",
|
|
34
|
+
"porque": "a regra central da skill, escrita fora da tabela de desculpas"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "Commit do reviewer dentro da branch que ele esta revisando",
|
|
39
|
+
"porque": "a bandeira vermelha correspondente"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "code-reviewer/rebaixa-por-pressa",
|
|
45
|
+
"tipo": "racionalizacao",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "Um bloqueador e rebaixado para aviso porque a entrega esta perto.",
|
|
48
|
+
"esperado": "Recusado: categoria nao se negocia por pressa; o rebaixamento e o defeito de processo que o eixo expoe.",
|
|
49
|
+
"racionalizacao": "Deixo como aviso para nao travar a entrega.",
|
|
50
|
+
"assercoes": [
|
|
51
|
+
{
|
|
52
|
+
"tipo": "contem",
|
|
53
|
+
"valor": "Categoria nao se negocia por pressa",
|
|
54
|
+
"porque": "a regra ancorada fora da tabela de desculpas"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"tipo": "contem",
|
|
58
|
+
"valor": "Achado sem categoria, ou sem o `REVIEW n`",
|
|
59
|
+
"porque": "a bandeira vermelha que cobra categoria e item"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "code-reviewer/eixo-nao-se-aplica",
|
|
65
|
+
"tipo": "borda",
|
|
66
|
+
"gravidade": "menor",
|
|
67
|
+
"cenario": "Um dos cinco eixos parece nao se aplicar ao diff.",
|
|
68
|
+
"esperado": "Escreve-se 'nenhum' e o motivo: eixo em branco e indistinguivel de eixo esquecido.",
|
|
69
|
+
"assercoes": [
|
|
70
|
+
{
|
|
71
|
+
"tipo": "contem",
|
|
72
|
+
"valor": "Os cinco eixos sao percorridos, todos",
|
|
73
|
+
"porque": "a regra que impede eixo silenciosamente pulado"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"tipo": "contem",
|
|
77
|
+
"valor": "REVIEW 7",
|
|
78
|
+
"porque": "o formato de citacao por item, que faz o achado resolver a mesma linha para todos"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "code-reviewer/duplicacao-sem-dono",
|
|
84
|
+
"tipo": "borda",
|
|
85
|
+
"gravidade": "menor",
|
|
86
|
+
"cenario": "O reviewer aponta duplicacao sem dizer de onde o codigo deveria vir.",
|
|
87
|
+
"esperado": "Achado incompleto: apontar duplicacao sem apontar o dono e sugestao vazia.",
|
|
88
|
+
"assercoes": [
|
|
89
|
+
{
|
|
90
|
+
"tipo": "contem",
|
|
91
|
+
"valor": "Duplicacao apontada sem dizer de onde o codigo deveria vir",
|
|
92
|
+
"porque": "a bandeira vermelha correspondente"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"tipo": "contem",
|
|
96
|
+
"valor": "Revisao sem escopo declarado nao e reproduzivel",
|
|
97
|
+
"porque": "o par da regra de conduta, no mesmo bloco"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "decision-triage",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "decision-triage/classifica-antes-de-agir",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "Varias decisoes aparecem no meio de uma fase.",
|
|
9
|
+
"esperado": "Cada uma recebe classe antes de virar acao; as de classe 1 e 2 sobem com opcoes e uma recomendacao.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "Classificar antes de agir",
|
|
14
|
+
"porque": "o primeiro item de conduta, que impede a classificacao virar justificativa"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "exatamente uma recomendacao",
|
|
19
|
+
"porque": "o que diferencia subir tradeoff de empurrar o problema"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "decision-triage/e-detalhe-tecnico",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "Uma decisao que muda o que o usuario ve e tratada como detalhe tecnico interno.",
|
|
28
|
+
"esperado": "Recusado: se muda o que o usuario ve, o que o produto promete ou o que custa dinheiro, e classe 1.",
|
|
29
|
+
"racionalizacao": "Isso e detalhe tecnico, decido sozinho.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "Tradeoff de produto, risco de negocio, prioridade, escopo, dinheiro",
|
|
34
|
+
"porque": "o conteudo da classe 1, na tabela de classes e fora da tabela de desculpas"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "Subclassificar",
|
|
39
|
+
"porque": "o nome do defeito, para o revisor conseguir cita-lo"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "decision-triage/pergunta-tudo",
|
|
45
|
+
"tipo": "racionalizacao",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "O agente leva ao humano ate escolha de nome de variavel, para nao errar.",
|
|
48
|
+
"esperado": "Recusado: escalacao indevida e defeito de igual peso e a auditoria caca os dois lados.",
|
|
49
|
+
"racionalizacao": "Pergunto tudo, assim ninguem reclama.",
|
|
50
|
+
"assercoes": [
|
|
51
|
+
{
|
|
52
|
+
"tipo": "contem",
|
|
53
|
+
"valor": "Auditar os dois lados com peso igual",
|
|
54
|
+
"porque": "a regra escrita fora da tabela de desculpas"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"tipo": "contem",
|
|
58
|
+
"valor": "escalacao indevida",
|
|
59
|
+
"porque": "o nome do defeito simetrico a subclassificacao"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "decision-triage/schema-compativel",
|
|
65
|
+
"tipo": "racionalizacao",
|
|
66
|
+
"gravidade": "maior",
|
|
67
|
+
"cenario": "Uma mudanca de schema parece compativel e o agente propoe seguir sem ratificacao.",
|
|
68
|
+
"esperado": "Recusado: contrato publico versionado e classe 2 e exige ratificacao registrada antes do merge.",
|
|
69
|
+
"racionalizacao": "Mudo o schema, e compativel na pratica.",
|
|
70
|
+
"assercoes": [
|
|
71
|
+
{
|
|
72
|
+
"tipo": "contem",
|
|
73
|
+
"valor": "Mudanca de contrato publico versionado",
|
|
74
|
+
"porque": "a definicao da classe 2, na tabela de classes"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"tipo": "contem",
|
|
78
|
+
"valor": "Mudanca de contrato publico no diff sem gate de ratificacao",
|
|
79
|
+
"porque": "a bandeira vermelha correspondente"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "decision-triage/reabrir-decisao",
|
|
85
|
+
"tipo": "borda",
|
|
86
|
+
"gravidade": "maior",
|
|
87
|
+
"cenario": "Uma decisao ja fechada precisa mudar por conta de fato novo.",
|
|
88
|
+
"esperado": "Reabrir e decisao nova, com registro proprio; editar a antiga apaga a razao da primeira.",
|
|
89
|
+
"assercoes": [
|
|
90
|
+
{
|
|
91
|
+
"tipo": "contem",
|
|
92
|
+
"valor": "Decisao fechada trava",
|
|
93
|
+
"porque": "a regra que impede edicao silenciosa"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"tipo": "contem",
|
|
97
|
+
"valor": "Decisao registrada em dois lugares com redacoes diferentes",
|
|
98
|
+
"porque": "a bandeira vermelha do domicilio duplicado"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "go-implementation",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "go-implementation/baseline-antes-do-primeiro-commit",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "A thread entra no GO e precisa comecar a implementar.",
|
|
9
|
+
"esperado": "A worktree e garantida, a baseline e gravada antes da primeira linha e cada tarefa vira um commit atomico.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "Baseline gravada antes da primeira linha",
|
|
14
|
+
"porque": "o passo que separa regressao de divida pre-existente"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "Um commit atomico por tarefa",
|
|
19
|
+
"porque": "o limite que torna a entrega reversivel e revisavel"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "go-implementation/rodei-e-passou",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "O agente reporta que rodou a suite localmente e ela passou.",
|
|
28
|
+
"esperado": "Recusado: passagem relatada nao e passagem; o `ork verify` reexecuta no HEAD real.",
|
|
29
|
+
"racionalizacao": "Eu rodei e passou, pode confiar.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "Passagem relatada por agente nao e passagem",
|
|
34
|
+
"porque": "a regra ancorada fora da tabela de desculpas"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "reexecuta claims e comandos do manifesto no HEAD real",
|
|
39
|
+
"porque": "o mecanismo que substitui a confianca"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "go-implementation/arvore-principal",
|
|
45
|
+
"tipo": "racionalizacao",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "O agente propoe trabalhar direto na arvore principal porque a worktree parece cerimonia.",
|
|
48
|
+
"esperado": "Recusado: a arvore principal nao e area de trabalho de thread nenhuma.",
|
|
49
|
+
"racionalizacao": "Mexo direto na arvore principal, e mais rapido.",
|
|
50
|
+
"assercoes": [
|
|
51
|
+
{
|
|
52
|
+
"tipo": "contem",
|
|
53
|
+
"valor": "A arvore principal nao e area de trabalho de thread nenhuma",
|
|
54
|
+
"porque": "a regra fora da tabela de desculpas"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"tipo": "contem",
|
|
58
|
+
"valor": "Trabalho acontecendo fora da worktree da thread",
|
|
59
|
+
"porque": "a bandeira vermelha correspondente"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "go-implementation/melhoria-oportunista",
|
|
65
|
+
"tipo": "racionalizacao",
|
|
66
|
+
"gravidade": "menor",
|
|
67
|
+
"cenario": "O agente aproveita a passagem pelo arquivo e corrige outra coisa que viu pela frente.",
|
|
68
|
+
"esperado": "Recusado: melhoria fora das tarefas do PLAN e scope creep e vira proposta, nunca commit escondido.",
|
|
69
|
+
"racionalizacao": "Aproveitei e arrumei outra coisa no caminho.",
|
|
70
|
+
"assercoes": [
|
|
71
|
+
{
|
|
72
|
+
"tipo": "contem",
|
|
73
|
+
"valor": "scope creep",
|
|
74
|
+
"porque": "o nome do defeito, para o revisor conseguir cita-lo"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"tipo": "contem",
|
|
78
|
+
"valor": "vira proposta, nunca commit escondido",
|
|
79
|
+
"porque": "o destino correto do achado"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "go-implementation/teste-ja-falhava",
|
|
85
|
+
"tipo": "borda",
|
|
86
|
+
"gravidade": "maior",
|
|
87
|
+
"cenario": "Um teste esta vermelho e o agente afirma que ele ja falhava antes da thread.",
|
|
88
|
+
"esperado": "Isso e afirmacao verificavel: a baseline responde por comando, e a divida entra declarada.",
|
|
89
|
+
"assercoes": [
|
|
90
|
+
{
|
|
91
|
+
"tipo": "contem",
|
|
92
|
+
"valor": "comando que passava antes e falha agora sai como",
|
|
93
|
+
"porque": "a regra que classifica a falha por comparacao, nao por opiniao"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"tipo": "contem",
|
|
97
|
+
"valor": "verify.regression",
|
|
98
|
+
"porque": "o motivo tipado que o gate usa"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "goal-definition",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "goal-definition/explora-antes-de-definir",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "Uma demanda entra no GOAL num repositorio que o agente nunca leu.",
|
|
9
|
+
"esperado": "O GOAL cita arquivos e trechos concretos, escreve as premissas e vira claims com comando.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "Exploracao do repositorio real",
|
|
14
|
+
"porque": "o passo que separa GOAL de resumo plausivel"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"tipo": "contem",
|
|
18
|
+
"valor": "Cite arquivos e trechos concretos ou a exploracao nao aconteceu",
|
|
19
|
+
"porque": "o criterio mecanico que um revisor consegue conferir"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "goal-definition/ja-conheco-o-framework",
|
|
25
|
+
"tipo": "racionalizacao",
|
|
26
|
+
"gravidade": "maior",
|
|
27
|
+
"cenario": "A demanda toca uma stack que o modelo domina e ele propoe pular a exploracao.",
|
|
28
|
+
"esperado": "Recusado: a exploracao mira o repositorio real, nao a memoria do modelo.",
|
|
29
|
+
"racionalizacao": "Eu ja conheco esse framework, da para pular a exploracao.",
|
|
30
|
+
"assercoes": [
|
|
31
|
+
{
|
|
32
|
+
"tipo": "contem",
|
|
33
|
+
"valor": "nao a memoria do modelo",
|
|
34
|
+
"porque": "a regra ancorada fora da tabela de desculpas"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"tipo": "contem",
|
|
38
|
+
"valor": "Um GOAL sem arquivo nem trecho citado",
|
|
39
|
+
"porque": "a bandeira vermelha que torna a recusa verificavel"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "goal-definition/adjetivo-como-metrica",
|
|
45
|
+
"tipo": "racionalizacao",
|
|
46
|
+
"gravidade": "maior",
|
|
47
|
+
"cenario": "O criterio de sucesso proposto e que a funcionalidade funcione bem e o usuario goste.",
|
|
48
|
+
"esperado": "Recusado: criterios sao observaveis, nunca adjetivos, e viram claims com comando.",
|
|
49
|
+
"racionalizacao": "O criterio e que funcione bem e o usuario goste.",
|
|
50
|
+
"assercoes": [
|
|
51
|
+
{
|
|
52
|
+
"tipo": "contem",
|
|
53
|
+
"valor": "nunca adjetivo",
|
|
54
|
+
"porque": "a regra escrita fora da tabela de desculpas"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"tipo": "contem",
|
|
58
|
+
"valor": "Criterio de sucesso escrito com adjetivo",
|
|
59
|
+
"porque": "a bandeira vermelha correspondente"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "goal-definition/premissas-obvias",
|
|
65
|
+
"tipo": "racionalizacao",
|
|
66
|
+
"gravidade": "maior",
|
|
67
|
+
"cenario": "A stack e o publico parecem evidentes e escrever premissas parece cerimonia.",
|
|
68
|
+
"esperado": "Recusado: premissa implicita e a maior fonte de retrabalho e e tratada como defeito de processo.",
|
|
69
|
+
"racionalizacao": "Listar premissa e burocracia, elas sao obvias.",
|
|
70
|
+
"assercoes": [
|
|
71
|
+
{
|
|
72
|
+
"tipo": "contem",
|
|
73
|
+
"valor": "Premissa implicita e a maior fonte de retrabalho",
|
|
74
|
+
"porque": "o custo declarado, fora da tabela de desculpas"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"tipo": "contem",
|
|
78
|
+
"valor": "Premissas ausentes",
|
|
79
|
+
"porque": "a bandeira vermelha que nomeia onde a conta chega"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "goal-definition/repositorio-vazio",
|
|
85
|
+
"tipo": "borda",
|
|
86
|
+
"gravidade": "menor",
|
|
87
|
+
"cenario": "O repositorio alvo esta vazio e o agente reporta que nao ha o que explorar.",
|
|
88
|
+
"esperado": "Explorar repositorio vazio tambem e explorar: escreve-se o que foi verificado ausente.",
|
|
89
|
+
"assercoes": [
|
|
90
|
+
{
|
|
91
|
+
"tipo": "contem",
|
|
92
|
+
"valor": "Explorar repositorio vazio tambem e explorar",
|
|
93
|
+
"porque": "a regra que impede a ausencia de virar premissa implicita"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"tipo": "contem",
|
|
97
|
+
"valor": "reproduzir o defeito e criterio obrigatorio",
|
|
98
|
+
"porque": "o par da regra para demanda de correcao, no mesmo item"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|