@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.
Files changed (44) hide show
  1. package/package.json +5 -3
  2. package/protocol/qa-result.v1.json +62 -0
  3. package/protocol/qa-trail-report.v1.json +113 -0
  4. package/src/api/github-graphql.mjs +6 -1
  5. package/src/api/github-rest.mjs +21 -0
  6. package/src/cli.mjs +114 -9
  7. package/src/commands/decompose.mjs +29 -3
  8. package/src/commands/doctor.mjs +183 -3
  9. package/src/commands/generate-qa-plan.mjs +421 -0
  10. package/src/commands/implement.mjs +56 -44
  11. package/src/commands/merge.mjs +43 -14
  12. package/src/commands/order.mjs +350 -96
  13. package/src/commands/qa-lead.mjs +748 -0
  14. package/src/commands/qa-run.mjs +892 -0
  15. package/src/commands/run.mjs +5 -1
  16. package/src/config.mjs +32 -1
  17. package/src/lib/artifact-pr.mjs +2 -0
  18. package/src/lib/artifact-publish.mjs +5 -2
  19. package/src/lib/board.mjs +14 -0
  20. package/src/lib/critique.mjs +38 -9
  21. package/src/lib/decomposition-doc.mjs +5 -1
  22. package/src/lib/dependency-map.mjs +300 -0
  23. package/src/lib/doc-paths.mjs +9 -2
  24. package/src/lib/git-retry.mjs +82 -0
  25. package/src/lib/net-cache.mjs +142 -0
  26. package/src/lib/next-step.mjs +15 -3
  27. package/src/lib/qa-exec.mjs +335 -0
  28. package/src/lib/qa-lead-backend.mjs +213 -0
  29. package/src/lib/qa-lead.mjs +627 -0
  30. package/src/lib/qa-plan-doc.mjs +340 -0
  31. package/src/lib/qa-report.mjs +396 -0
  32. package/src/lib/skill-compose.mjs +234 -0
  33. package/src/lib/story-graph.mjs +256 -0
  34. package/src/plugin/.claude-plugin/plugin.json +1 -1
  35. package/src/plugin/skills/merge/SKILL.md +1 -0
  36. package/src/plugin/skills/order/SKILL.md +21 -5
  37. package/src/plugin/skills/qa/SKILL.md +107 -0
  38. package/src/plugin/skills/qa/model-prompt.critique.md +44 -0
  39. package/src/plugin/skills/qa/model-prompt.md +68 -0
  40. package/src/plugin/skills/qa-executor/SKILL.md +76 -0
  41. package/src/plugin/skills/qa-lead/SKILL.md +89 -0
  42. package/src/templates/skill/SKILL.md +981 -279
  43. package/src/templates/skill/core.md +584 -0
  44. 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.