@spec-wave/cli 0.29.0 → 0.32.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/package.json +5 -3
- package/protocol/qa-result.v1.json +62 -0
- package/protocol/qa-trail-report.v1.json +113 -0
- package/src/api/github-graphql.mjs +6 -1
- package/src/api/github-rest.mjs +21 -0
- package/src/cli.mjs +114 -9
- package/src/commands/decompose.mjs +29 -3
- package/src/commands/doctor.mjs +183 -3
- package/src/commands/generate-qa-plan.mjs +421 -0
- package/src/commands/implement.mjs +56 -44
- package/src/commands/merge.mjs +43 -14
- package/src/commands/order.mjs +350 -96
- package/src/commands/qa-lead.mjs +748 -0
- package/src/commands/qa-run.mjs +892 -0
- package/src/commands/run.mjs +5 -1
- package/src/config.mjs +32 -1
- package/src/lib/artifact-pr.mjs +2 -0
- package/src/lib/artifact-publish.mjs +5 -2
- package/src/lib/board.mjs +14 -0
- package/src/lib/critique.mjs +38 -9
- package/src/lib/decomposition-doc.mjs +5 -1
- package/src/lib/dependency-map.mjs +300 -0
- package/src/lib/doc-paths.mjs +9 -2
- package/src/lib/git-retry.mjs +82 -0
- package/src/lib/net-cache.mjs +142 -0
- package/src/lib/next-step.mjs +15 -3
- package/src/lib/qa-exec.mjs +335 -0
- package/src/lib/qa-lead-backend.mjs +213 -0
- package/src/lib/qa-lead.mjs +627 -0
- package/src/lib/qa-plan-doc.mjs +340 -0
- package/src/lib/qa-report.mjs +396 -0
- package/src/lib/skill-compose.mjs +234 -0
- package/src/lib/story-graph.mjs +256 -0
- package/src/plugin/.claude-plugin/plugin.json +1 -1
- package/src/plugin/skills/merge/SKILL.md +1 -0
- package/src/plugin/skills/order/SKILL.md +21 -5
- package/src/plugin/skills/qa/SKILL.md +107 -0
- package/src/plugin/skills/qa/model-prompt.critique.md +44 -0
- package/src/plugin/skills/qa/model-prompt.md +68 -0
- package/src/plugin/skills/qa-executor/SKILL.md +76 -0
- package/src/plugin/skills/qa-lead/SKILL.md +89 -0
- package/src/templates/skill/SKILL.md +981 -279
- package/src/templates/skill/core.md +584 -0
- package/src/templates/workflows/generate-qa-plan.yml +64 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-qa-lead
|
|
3
|
+
description: "Use para orquestrar o QA de uma TRILHA inteira (milestone) do spec-wave — preparar os planos de todas as Features (`qa-lead plan`), executar o ciclo com containers paralelos (`qa-lead run`) e consultar relatórios de ciclo (`qa-lead report`). Gatilhos: 'rodar o QA do milestone', 'QA da release', 'trilha de QA', 'relatório de QA do ciclo'."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest qa-lead *)
|
|
6
|
+
- Bash(npx @spec-wave/cli@latest qa *)
|
|
7
|
+
- Bash(npx @spec-wave/cli@latest doctor)
|
|
8
|
+
- Bash(gh issue *)
|
|
9
|
+
- Read
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# spec-wave qa-lead — QA de trilha (milestone)
|
|
13
|
+
|
|
14
|
+
O `qa` valida **uma** issue; o `qa-lead` percorre **todas as Features de um
|
|
15
|
+
milestone** (trilha = milestone, D-QAL1), em duas fases com um portão humano no
|
|
16
|
+
meio (D-QAL2). O Lead **não executa cenário, não abre Bug, não move card** —
|
|
17
|
+
toda mutação de board continua no `qa`, que roda dentro dos containers.
|
|
18
|
+
|
|
19
|
+
## Fase A — preparar os planos
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx @spec-wave/cli@latest qa-lead plan <milestone> --dry-run # classifica sem aplicar nada
|
|
23
|
+
npx @spec-wave/cli@latest qa-lead plan <milestone> [--watch]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Classifica cada Feature (pronta / portão humano / em voo / sem spec-plan) e
|
|
27
|
+
aplica `spec-wave:qa` nas que precisam de plano. **PARA aqui** (D-QA4): o humano
|
|
28
|
+
revisa os `qa-plan.md` e o Action aplica `qa-ready`. `--watch` acompanha até
|
|
29
|
+
resolver (teto `qa.lead.planWaitTimeoutMin`). Exit 0 só com a trilha inteira
|
|
30
|
+
pronta.
|
|
31
|
+
|
|
32
|
+
- Feature com `critique-failed`/`needs-human` é **portão humano**: o Lead nunca
|
|
33
|
+
aplica gatilho nela — corrija o documento apontado no comentário 🔎 primeiro.
|
|
34
|
+
|
|
35
|
+
## Fase B — executar o ciclo
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx @spec-wave/cli@latest qa-lead run <milestone> --dry-run # plano de despacho, zero container
|
|
39
|
+
npx @spec-wave/cli@latest qa-lead run <milestone> [--only 318,320] [--max-cycles 3]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- **Portão:** toda Feature em 🧪 QA precisa de `qa-ready`, senão recusa listando
|
|
43
|
+
as pendentes. Features em etapa anterior aparecem como `fora-do-ciclo`;
|
|
44
|
+
posteriores, `ja-aprovada` — contabilizadas, sem bloquear.
|
|
45
|
+
- **Preflight global** antes de qualquer container (backend, imagem,
|
|
46
|
+
credenciais, disco). Falha → ciclo `ciclo-abortado` com relatório emitido.
|
|
47
|
+
- **Despacho:** até `qa.lead.maxParallel` containers, um ambiente isolado por
|
|
48
|
+
Feature (D-QAL3), rodando `qa <feature>`. Timeout mata o container e a
|
|
49
|
+
Feature vira `execucao-abortada` (nunca lida como verde).
|
|
50
|
+
- **Ciclos:** o N+1 só existe se um Bug fechou ou um bloqueio caiu desde o N
|
|
51
|
+
(D-QAL7); retestes usam `qa <story> --only <cenários>`. Teto de 3 ciclos.
|
|
52
|
+
|
|
53
|
+
Configuração no `.spec-wave.json` (defaults entre parênteses):
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"qa": {
|
|
58
|
+
"lead": {
|
|
59
|
+
"maxParallel": 4, "maxCycles": 3, "featureTimeoutMin": 45,
|
|
60
|
+
"pollIntervalSec": 30, "planWaitTimeoutMin": 20,
|
|
61
|
+
"container": { "image": "ghcr.io/acme/qa-runner:1.4", "env": { "NODE_ENV": "test" } }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`container.image` é **obrigatória** para a fase B. Valor vazio em
|
|
68
|
+
`container.env` significa "vem do ambiente do Lead". Backend: `docker`
|
|
69
|
+
(default) ou `sandbox` (follow-up — ainda sem API de sessão).
|
|
70
|
+
|
|
71
|
+
## Relatórios
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx @spec-wave/cli@latest qa-lead report <milestone> [--cycle <n>]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Cada ciclo grava `docs/qa/<slug-milestone>/cycle-<n>/{report.md,report.json}`
|
|
78
|
+
(schema em `protocol/qa-trail-report.v1.json`) e atualiza um **bloco delimitado**
|
|
79
|
+
na descrição do milestone — substituído a cada ciclo, preservando o resto da
|
|
80
|
+
descrição (Release Notes moram no mesmo campo).
|
|
81
|
+
|
|
82
|
+
## O que o Lead escreve (e NADA além)
|
|
83
|
+
|
|
84
|
+
1. a label de gatilho `spec-wave:qa` (fase A);
|
|
85
|
+
2. `docs/qa/<slug>/cycle-<n>/{report.md,report.json}`;
|
|
86
|
+
3. o bloco delimitado na descrição do milestone.
|
|
87
|
+
|
|
88
|
+
Etapa, `qa-approved`, Bugs e comentários de veredito são do `qa`. Se algo mais
|
|
89
|
+
precisar mudar no board, use as skills **qa** ou **move** — nunca por fora.
|