@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,102 @@
1
+ {
2
+ "skill": "security-auditor",
3
+ "casos": [
4
+ {
5
+ "id": "security-auditor/escopo-e-historico",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "A auditoria de seguranca comeca sobre a branch da thread.",
9
+ "esperado": "O escopo e declarado, o historico entra no escopo e a condicao de passagem e zero bloqueadores.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "zero bloqueadores de seguranca, em qualquer modo",
14
+ "porque": "a condicao dura, valida ate no modo mais autonomo"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "O historico entra no escopo",
19
+ "porque": "a regra que impede a auditoria de olhar so a arvore"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "security-auditor/segredo-so-no-fixture",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "Uma chave real aparece em um fixture de teste e o agente considera isso inofensivo.",
28
+ "esperado": "Recusado: fixture esta no escopo, e credencial em teste e credencial vazada.",
29
+ "racionalizacao": "A chave esta so no fixture de teste.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "Fixture de teste e config de exemplo estao no escopo",
34
+ "porque": "a regra ancorada fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "SEC 1",
39
+ "porque": "o item da checklist que o achado viola"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "security-auditor/cola-o-segredo-no-relatorio",
45
+ "tipo": "racionalizacao",
46
+ "gravidade": "maior",
47
+ "cenario": "O agente quer colar o trecho vazado no relatorio para o time ver.",
48
+ "esperado": "Recusado: relatorio de vazamento que imprime o segredo e um segundo vazamento.",
49
+ "racionalizacao": "Colo o trecho no relatorio para o time ver.",
50
+ "assercoes": [
51
+ {
52
+ "tipo": "contem",
53
+ "valor": "Relatorio de vazamento que imprime o segredo e um segundo vazamento",
54
+ "porque": "a regra em negrito, fora da tabela de desculpas"
55
+ },
56
+ {
57
+ "tipo": "contem",
58
+ "valor": "O achado nomeia o padrao, o arquivo e a linha",
59
+ "porque": "a forma correta de reportar"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "security-auditor/commit-apagado",
65
+ "tipo": "borda",
66
+ "gravidade": "maior",
67
+ "cenario": "O token foi commitado e depois removido em outro commit.",
68
+ "esperado": "Continua vazado: apagar da arvore nao apaga do historico, e a rotacao precisa ser verificada.",
69
+ "assercoes": [
70
+ {
71
+ "tipo": "contem",
72
+ "valor": "Apagar da arvore nao apaga do historico",
73
+ "porque": "a regra que fecha a saida mais comum"
74
+ },
75
+ {
76
+ "tipo": "contem",
77
+ "valor": "git log -p",
78
+ "porque": "o comando que percorre o intervalo do historico"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "id": "security-auditor/nada-encontrado",
84
+ "tipo": "borda",
85
+ "gravidade": "menor",
86
+ "cenario": "A auditoria termina sem achados e o relatorio diz apenas 'nada encontrado'.",
87
+ "esperado": "Insuficiente: ausencia e afirmada como resultado de verificacao, com o que foi olhado.",
88
+ "assercoes": [
89
+ {
90
+ "tipo": "contem",
91
+ "valor": "Ausencia e afirmada como resultado",
92
+ "porque": "a regra de conduta que separa auditado de nao olhado"
93
+ },
94
+ {
95
+ "tipo": "contem",
96
+ "valor": "\"Nada encontrado\" sem dizer o que foi olhado",
97
+ "porque": "a bandeira vermelha correspondente"
98
+ }
99
+ ]
100
+ }
101
+ ]
102
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "skill": "ship-release",
3
+ "casos": [
4
+ {
5
+ "id": "ship-release/push-provado",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "A thread passou no CHECK e vai entregar na base.",
9
+ "esperado": "O merge passa pela fila do lease e o push e provado comparando o sha local com o do remoto.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "Push provado por comando",
14
+ "porque": "o item que substitui o relato de sucesso"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "pushVerificado",
19
+ "porque": "o campo do ledger onde a prova fica"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "ship-release/ja-empurrei-deu-certo",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "O agente diz que ja empurrou e que deu certo.",
28
+ "esperado": "Recusado: push relatado sem sha do remoto conta como push que nao aconteceu.",
29
+ "racionalizacao": "Ja empurrei, deu certo.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "Push relatado sem sha do remoto conta como push que nao aconteceu",
34
+ "porque": "a regra em negrito, fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "Push sem `pushVerificado` no ledger",
39
+ "porque": "a bandeira vermelha correspondente"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "ship-release/merge-direto-na-base",
45
+ "tipo": "racionalizacao",
46
+ "gravidade": "maior",
47
+ "cenario": "A mudanca e pequena e o agente propoe commitar direto na base.",
48
+ "esperado": "Recusado: a policy push_direto_na_base e bloqueante e reprova antes de tocar no remoto.",
49
+ "racionalizacao": "Mergeio direto na base, e um commit so.",
50
+ "assercoes": [
51
+ {
52
+ "tipo": "contem",
53
+ "valor": "push_direto_na_base",
54
+ "porque": "o nome da policy que reprova, fora da tabela de desculpas"
55
+ },
56
+ {
57
+ "tipo": "contem",
58
+ "valor": "reprova antes de o `ork` tocar no remoto",
59
+ "porque": "o momento em que a reprovacao acontece"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "ship-release/base-andou-mas-nao-encosta",
65
+ "tipo": "racionalizacao",
66
+ "gravidade": "maior",
67
+ "cenario": "A base avancou e o agente argumenta que o diff dele nao encosta na mudanca.",
68
+ "esperado": "Recusado: atualiza e revalida, porque a atualizacao pode trazer mudanca que toca contrato.",
69
+ "racionalizacao": "A base andou mas o meu diff nao encosta nisso.",
70
+ "assercoes": [
71
+ {
72
+ "tipo": "contem",
73
+ "valor": "Um veredito calculado antes da atualizacao descreve um diff que nao existe mais",
74
+ "porque": "a razao escrita fora da tabela de desculpas"
75
+ },
76
+ {
77
+ "tipo": "contem",
78
+ "valor": "a guarda roda de novo depois da atualizacao",
79
+ "porque": "o item que impede a guarda de contrato de virar teatro"
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "id": "ship-release/ork-dispensa-autorizacao",
85
+ "tipo": "borda",
86
+ "gravidade": "maior",
87
+ "cenario": "A thread e #Ork, que autoriza o push antecipadamente, e alguem conclui que nao precisa de autorizacao.",
88
+ "esperado": "A autorizacao e antecipada e REGISTRADA, nunca dispensada.",
89
+ "assercoes": [
90
+ {
91
+ "tipo": "contem",
92
+ "valor": "autorizacao humana registrada",
93
+ "porque": "o comando que transforma autorizacao em evento"
94
+ },
95
+ {
96
+ "tipo": "contem",
97
+ "valor": "ork gate approve",
98
+ "porque": "o comando exato que grava a autorizacao"
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "id": "ship-release/sem-plano-de-rollback",
104
+ "tipo": "borda",
105
+ "gravidade": "menor",
106
+ "cenario": "O artefato da fase nao traz plano de rollback.",
107
+ "esperado": "Falta um item obrigatorio: o rollback se escreve antes do merge, com o comando exato.",
108
+ "assercoes": [
109
+ {
110
+ "tipo": "contem",
111
+ "valor": "Plano de rollback",
112
+ "porque": "o item que a fase precisa entregar"
113
+ },
114
+ {
115
+ "tipo": "contem",
116
+ "valor": "Nenhum plano de rollback no artefato da fase",
117
+ "porque": "a bandeira vermelha correspondente"
118
+ }
119
+ ]
120
+ }
121
+ ]
122
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "skill": "test-engineer",
3
+ "casos": [
4
+ {
5
+ "id": "test-engineer/suite-verde-ganha",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "A thread chega ao CHECK com a suite verde.",
9
+ "esperado": "A comparacao e contra a baseline e o reviewer procura afrouxamento, nao so vermelho.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "Suite verde precisa ser ganha, nao declarada",
14
+ "porque": "a regra central da skill"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "Procurar o afrouxamento",
19
+ "porque": "a conduta que separa revisao de teste de leitura de log"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "test-engineer/teste-flaky-pulado",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "Um teste instavel foi marcado para pular no mesmo commit da correcao.",
28
+ "esperado": "Recusado: pular teste e mudanca de escopo com registro; sem registro e o defeito saindo pela porta dos fundos.",
29
+ "racionalizacao": "Esse teste era flaky, marquei para pular.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "teste marcado para pular",
34
+ "porque": "o que a conduta manda procurar, fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "`skip` novo sem registro",
39
+ "porque": "a bandeira vermelha correspondente"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "test-engineer/assercao-ajustada",
45
+ "tipo": "racionalizacao",
46
+ "gravidade": "maior",
47
+ "cenario": "A assercao foi trocada pelo valor que o codigo produz hoje.",
48
+ "esperado": "Recusado: ajustar o esperado ao observado transforma defeito em contrato.",
49
+ "racionalizacao": "Ajustei a assercao para o valor certo.",
50
+ "assercoes": [
51
+ {
52
+ "tipo": "contem",
53
+ "valor": "Ajustar o esperado ao observado e a forma mais comum de transformar defeito em contrato",
54
+ "porque": "a regra em negrito, fora da tabela de desculpas"
55
+ },
56
+ {
57
+ "tipo": "contem",
58
+ "valor": "Assercao alterada sem razao escrita",
59
+ "porque": "a bandeira vermelha correspondente"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "test-engineer/cobertura-de-cabeca",
65
+ "tipo": "racionalizacao",
66
+ "gravidade": "maior",
67
+ "cenario": "O relatorio traz uma cobertura estimada de oitenta por cento, sem ferramenta na maquina.",
68
+ "esperado": "Recusado: numero sem origem nao entra; sem ferramenta, a cobertura sai unavailable com o motivo.",
69
+ "racionalizacao": "Cobertura esta em uns 80 por cento.",
70
+ "assercoes": [
71
+ {
72
+ "tipo": "contem",
73
+ "valor": "Reportar numero com origem",
74
+ "porque": "a regra de honestidade de medicao, fora da tabela"
75
+ },
76
+ {
77
+ "tipo": "contem",
78
+ "valor": "Lacuna e publicada como lacuna, nunca como zero",
79
+ "porque": "a formulacao que o revisor consegue citar"
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "id": "test-engineer/correcao-sem-reproducao",
85
+ "tipo": "borda",
86
+ "gravidade": "maior",
87
+ "cenario": "Uma correcao chega sem teste que reproduza o defeito.",
88
+ "esperado": "Recusado: correcao cujo defeito nunca foi reproduzido nao prova que corrigiu nada.",
89
+ "assercoes": [
90
+ {
91
+ "tipo": "contem",
92
+ "valor": "Exigir o teste que reproduz o defeito",
93
+ "porque": "o item de conduta da skill"
94
+ },
95
+ {
96
+ "tipo": "contem",
97
+ "valor": "que ele falhasse antes da correcao",
98
+ "porque": "a condicao que torna a reproducao real"
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "id": "test-engineer/sem-baseline",
104
+ "tipo": "borda",
105
+ "gravidade": "maior",
106
+ "cenario": "A thread chega ao CHECK sem baseline gravada.",
107
+ "esperado": "Falha de processo: sem baseline, falha nao distingue regressao de divida pre-existente.",
108
+ "assercoes": [
109
+ {
110
+ "tipo": "contem",
111
+ "valor": "Nenhuma baseline gravada antes do GO",
112
+ "porque": "a bandeira vermelha correspondente"
113
+ },
114
+ {
115
+ "tipo": "contem",
116
+ "valor": "verify.regression",
117
+ "porque": "o motivo tipado que so existe porque a baseline existe"
118
+ }
119
+ ]
120
+ }
121
+ ]
122
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "skill": "thread-state",
3
+ "casos": [
4
+ {
5
+ "id": "thread-state/retoma-do-disco",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "Uma sessao nova precisa retomar uma thread que outra sessao abriu ontem.",
9
+ "esperado": "O estado e lido por comando, do disco, e a fase atual sai do thread.json e do ledger.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "ork thread status",
14
+ "porque": "o comando que le o estado real em vez de reconstruir por memoria"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "o prompt exato com `sha256`",
19
+ "porque": "o que torna o pedido de cada sessao uma evidencia e nao uma lembranca"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "thread-state/edita-o-json-na-mao",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "O agente quer corrigir um campo do thread.json abrindo o arquivo no editor.",
28
+ "esperado": "Recusado: todo campo tem um comando que o escreve, e o comando tambem registra no ledger.",
29
+ "racionalizacao": "E mais rapido editar o thread.json na mao.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "Editar `thread.json` com editor de texto e corromper estado",
34
+ "porque": "a regra escrita fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "Append-only",
39
+ "porque": "o motivo pelo qual escrita manual quebra o historico"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "thread-state/ledger-append-only",
45
+ "tipo": "borda",
46
+ "gravidade": "maior",
47
+ "cenario": "Um evento ficou errado no ledger e alguem propoe reescrever a linha.",
48
+ "esperado": "Recusado: correcao entra como evento novo; historico editado deixa de ser historico.",
49
+ "assercoes": [
50
+ {
51
+ "tipo": "contem",
52
+ "valor": "Correcao entra como evento novo",
53
+ "porque": "a regra que preserva o rastro"
54
+ },
55
+ {
56
+ "tipo": "contem",
57
+ "valor": "historico editado deixa de ser historico",
58
+ "porque": "a consequencia, dita de forma que o revisor consegue citar"
59
+ }
60
+ ]
61
+ },
62
+ {
63
+ "id": "thread-state/disco-diverge-do-runtime",
64
+ "tipo": "borda",
65
+ "gravidade": "menor",
66
+ "cenario": "O thread.json diz que uma sessao esta viva e o runtime nao a reconhece.",
67
+ "esperado": "A divergencia e dita em voz alta, e o estado real do runtime vence o gravado.",
68
+ "assercoes": [
69
+ {
70
+ "tipo": "contem",
71
+ "valor": "O estado real vence o estado gravado",
72
+ "porque": "a regra de precedencia entre disco e runtime"
73
+ },
74
+ {
75
+ "tipo": "contem",
76
+ "valor": "aparece como divergencia",
77
+ "porque": "o comportamento esperado quando os dois discordam"
78
+ }
79
+ ]
80
+ }
81
+ ]
82
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "skill": "thread-tracing",
3
+ "casos": [
4
+ {
5
+ "id": "thread-tracing/reconstroi-do-gravado",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "Alguem precisa entender o que aconteceu numa thread ja fechada.",
9
+ "esperado": "O rastro sai do que esta gravado e responde pedido, decisor, evidencia, motivo tipado e origem de cada numero.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "Um roteador fino de leitura",
14
+ "porque": "o papel da skill, que e so ler"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "Evento sem evidencia e anotacao, nao rastro",
19
+ "porque": "o criterio que separa rastro de narrativa"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "thread-tracing/escreve-para-completar",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "Falta um evento no ledger e o agente propoe escrever um para completar a historia.",
28
+ "esperado": "Recusado: observabilidade nao escreve no estado; evento inventado depois e reconstrucao, nao rastro.",
29
+ "racionalizacao": "Escrevo um evento a mais para deixar o rastro completo.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "nunca escreve no estado",
34
+ "porque": "a regra em negrito, fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "observabilidade que altera o que observa deixa de ser observabilidade",
39
+ "porque": "a razao, dita de forma citavel"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "thread-tracing/estimativa-como-leitura",
45
+ "tipo": "racionalizacao",
46
+ "gravidade": "maior",
47
+ "cenario": "O runtime nao expoe o gasto de token e o agente apresenta uma estimativa como medida.",
48
+ "esperado": "Recusado: sem medida, sai unavailable com o motivo; estimativa apresentada como leitura e o comeco de todo painel falso.",
49
+ "racionalizacao": "O token gasto deve ter sido uns X.",
50
+ "assercoes": [
51
+ {
52
+ "tipo": "contem",
53
+ "valor": "O que o runtime nao expoe sai `unavailable`, com o motivo",
54
+ "porque": "a regra fora da tabela de desculpas"
55
+ },
56
+ {
57
+ "tipo": "contem",
58
+ "valor": "Lacuna e publicada como lacuna, nunca como zero",
59
+ "porque": "a formulacao em negrito que o revisor consegue citar"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "thread-tracing/reordena-o-ledger",
65
+ "tipo": "borda",
66
+ "gravidade": "maior",
67
+ "cenario": "O ledger fica dificil de ler e alguem propoe reordena-lo.",
68
+ "esperado": "Recusado: o ledger e append-only e a ordem e evidencia; legibilidade e trabalho da apresentacao.",
69
+ "assercoes": [
70
+ {
71
+ "tipo": "contem",
72
+ "valor": "a ordem e evidencia",
73
+ "porque": "a razao de nao reordenar"
74
+ },
75
+ {
76
+ "tipo": "contem",
77
+ "valor": "Metrica com numero redondo e sem origem",
78
+ "porque": "a bandeira vermelha vizinha, que fecha o mesmo tema"
79
+ }
80
+ ]
81
+ }
82
+ ]
83
+ }
@@ -0,0 +1,102 @@
1
+ {
2
+ "skill": "web-performance-auditor",
3
+ "casos": [
4
+ {
5
+ "id": "web-performance-auditor/mede-antes-de-afirmar",
6
+ "tipo": "caminho-feliz",
7
+ "gravidade": "maior",
8
+ "cenario": "O alvo tem superficie sensivel a latencia e a thread mexeu no caminho quente.",
9
+ "esperado": "As medidas trazem numero, unidade e metodo, na mesma maquina e no mesmo regime.",
10
+ "assercoes": [
11
+ {
12
+ "tipo": "contem",
13
+ "valor": "Medir antes de afirmar",
14
+ "porque": "o item de conduta que governa a secao inteira"
15
+ },
16
+ {
17
+ "tipo": "contem",
18
+ "valor": "Comparar na mesma maquina e no mesmo regime",
19
+ "porque": "a condicao que impede comparar maquinas em vez de codigo"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "web-performance-auditor/ficou-mais-rapido",
25
+ "tipo": "racionalizacao",
26
+ "gravidade": "maior",
27
+ "cenario": "O agente afirma que ficou visivelmente mais rapido.",
28
+ "esperado": "Recusado: sem numero, unidade e metodo, e opiniao, e opiniao nao passa em gate.",
29
+ "racionalizacao": "Ficou visivelmente mais rapido.",
30
+ "assercoes": [
31
+ {
32
+ "tipo": "contem",
33
+ "valor": "\"Ficou mais rapido\" sem medida e opiniao",
34
+ "porque": "a regra em negrito, fora da tabela de desculpas"
35
+ },
36
+ {
37
+ "tipo": "contem",
38
+ "valor": "Afirmacao de ganho sem numero e sem metodo",
39
+ "porque": "a bandeira vermelha correspondente"
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "web-performance-auditor/uma-execucao-basta",
45
+ "tipo": "racionalizacao",
46
+ "gravidade": "menor",
47
+ "cenario": "O agente roda o benchmark uma vez e apresenta o resultado como medida.",
48
+ "esperado": "Recusado: uma execucao unica vira estimated, nunca runtime_reported.",
49
+ "racionalizacao": "Rodei uma vez e ja deu para ver.",
50
+ "assercoes": [
51
+ {
52
+ "tipo": "contem",
53
+ "valor": "Uma execucao unica vira `estimated`, nunca `runtime_reported`",
54
+ "porque": "a regra ancorada fora da tabela de desculpas"
55
+ },
56
+ {
57
+ "tipo": "contem",
58
+ "valor": "repeticao suficiente para separar sinal de ruido",
59
+ "porque": "a condicao que a regra impoe"
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "web-performance-auditor/sem-superficie-web",
65
+ "tipo": "borda",
66
+ "gravidade": "maior",
67
+ "cenario": "O alvo da thread nao tem superficie web nem caminho sensivel a latencia.",
68
+ "esperado": "A secao existe assim mesmo e contem a dispensa escrita, com o motivo.",
69
+ "assercoes": [
70
+ {
71
+ "tipo": "contem",
72
+ "valor": "condicional e nunca ausente",
73
+ "porque": "a regra que impede a secao de sumir"
74
+ },
75
+ {
76
+ "tipo": "contem",
77
+ "valor": "Decidir e registrar a aplicabilidade",
78
+ "porque": "o primeiro item de conduta"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "id": "web-performance-auditor/zero-onde-nao-mediu",
84
+ "tipo": "borda",
85
+ "gravidade": "maior",
86
+ "cenario": "O relatorio preenche com zero os campos que ninguem conseguiu medir.",
87
+ "esperado": "Recusado: o que nao foi medido sai unavailable com o motivo; zero e um dado, e um dado falso.",
88
+ "assercoes": [
89
+ {
90
+ "tipo": "contem",
91
+ "valor": "Declarar origem em todo numero",
92
+ "porque": "o item de conduta correspondente"
93
+ },
94
+ {
95
+ "tipo": "contem",
96
+ "valor": "nao medivel",
97
+ "porque": "a mesma disciplina do gate de tokens do nucleo, citada como precedente"
98
+ }
99
+ ]
100
+ }
101
+ ]
102
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "descricao": "Fixture minima do bloco B0: pedido do builder com #TAG produz slug de 3 partes, blocos do modo e numero de pausas humanas.",
3
+ "manifesto": {
4
+ "project": { "name": "orkastery", "abbrev": "ork" }
5
+ },
6
+ "casos": [
7
+ {
8
+ "pedido": "Fecha o nucleo do bloco B0 do Orkastery #Auto",
9
+ "nome": "core b0",
10
+ "modoEsperado": "auto",
11
+ "slugEsperado": "ork-coreb0-full",
12
+ "blocosEsperados": ["GOAL-PLAN-GO-CHECK-SHIP-MASTER"],
13
+ "pausasEsperadas": 0
14
+ },
15
+ {
16
+ "pedido": "Refatorar o checkout do carrinho #Ork",
17
+ "nome": "checkout",
18
+ "modoEsperado": "ork",
19
+ "slugEsperado": "ork-checkout-f12",
20
+ "blocosEsperados": ["GOAL-PLAN", "GO", "CHECK", "SHIP", "MASTER"],
21
+ "pausasEsperadas": 5
22
+ },
23
+ {
24
+ "pedido": "Migracao de dados com risco alto #Look",
25
+ "nome": "migracao",
26
+ "modoEsperado": "look",
27
+ "slugEsperado": "ork-migracao-goal",
28
+ "blocosEsperados": ["GOAL", "PLAN", "GO", "CHECK", "SHIP", "MASTER"],
29
+ "pausasEsperadas": 6
30
+ },
31
+ {
32
+ "pedido": "Ajuste simples e claro no rodape #Maestro",
33
+ "nome": "rodape",
34
+ "modoEsperado": "maestro",
35
+ "slugEsperado": "ork-rodape-f12",
36
+ "blocosEsperados": ["GOAL-PLAN", "GO-CHECK-SHIP", "MASTER"],
37
+ "pausasEsperadas": 1
38
+ },
39
+ {
40
+ "pedido": "Premissas delicadas do pipeline #Classic",
41
+ "nome": "pipeline",
42
+ "modoEsperado": "classic",
43
+ "slugEsperado": "ork-pipeline-goal",
44
+ "blocosEsperados": ["GOAL", "PLAN", "GO-CHECK", "SHIP-MASTER"],
45
+ "pausasEsperadas": 3
46
+ },
47
+ {
48
+ "pedido": "Pedido sem tag nenhuma",
49
+ "nome": "semtag",
50
+ "modoEsperado": null,
51
+ "slugEsperado": "ork-semtag-goal",
52
+ "blocosEsperados": ["GOAL", "PLAN", "GO-CHECK", "SHIP-MASTER"],
53
+ "pausasEsperadas": 3
54
+ }
55
+ ]
56
+ }