@spec-wave/cli 0.26.0 → 0.28.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 +1 -1
- package/src/api/github-rest.mjs +52 -0
- package/src/cli.mjs +12 -0
- package/src/commands/decompose.mjs +166 -39
- package/src/commands/doctor.mjs +214 -3
- package/src/commands/generate-bug.mjs +22 -16
- package/src/commands/generate-plan.mjs +72 -23
- package/src/commands/generate-spec.mjs +19 -15
- package/src/commands/implement.mjs +47 -22
- package/src/commands/install-skill.mjs +18 -8
- package/src/commands/preflight.mjs +322 -0
- package/src/commands/run.mjs +51 -30
- package/src/commands/update.mjs +143 -12
- package/src/commands/validate.mjs +84 -17
- package/src/config.mjs +18 -0
- package/src/lib/artifact-pr.mjs +272 -0
- package/src/lib/artifact-publish.mjs +169 -0
- package/src/lib/doc-availability.mjs +23 -1
- package/src/lib/doc-source.mjs +162 -0
- package/src/lib/flow-run.mjs +9 -218
- package/src/lib/next-step.mjs +27 -4
- package/src/lib/pr-branch.mjs +106 -7
- package/src/lib/repo-links.mjs +8 -2
- package/src/plugin/.claude-plugin/plugin.json +1 -1
- package/src/plugin/README.md +5 -0
- package/src/plugin/skills/bug/SKILL.md +2 -2
- package/src/plugin/skills/decompose/SKILL.md +4 -4
- package/src/plugin/skills/plan/SKILL.md +1 -1
- package/src/plugin/skills/preparar-feature/SKILL.md +245 -0
- package/src/plugin/skills/preparar-feature/reference/critica.md +88 -0
- package/src/plugin/skills/preparar-specs/SKILL.md +171 -0
- package/src/plugin/skills/preparar-specs/reference/armadilhas.md +209 -0
- package/src/plugin/skills/preparar-specs/reference/revisao.md +107 -0
- package/src/plugin/skills/run/SKILL.md +3 -1
- package/src/plugin/skills/spec/SKILL.md +4 -4
- package/src/plugin/skills/update/SKILL.md +10 -4
- package/src/plugin/skills/workflow/SKILL.md +8 -3
- package/src/templates/skill/SKILL.md +13 -10
- package/src/templates/workflows/code-review.yml +13 -2
- package/src/templates/workflows/critique.yml +1 -1
- package/src/templates/workflows/decompose.yml +13 -2
- package/src/templates/workflows/generate-bug.yml +17 -6
- package/src/templates/workflows/generate-plan.yml +20 -7
- package/src/templates/workflows/generate-spec.yml +20 -7
- package/src/templates/workflows/qa.yml +13 -0
|
@@ -5,12 +5,11 @@ on:
|
|
|
5
5
|
types: [labeled]
|
|
6
6
|
|
|
7
7
|
# Trava por ITEM, no mesmo namespace de generate-spec/plan/decompose e do job
|
|
8
|
-
# `move` do code-review.yml. Este job
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# lib/flow-run.mjs — serializar o repositório inteiro mataria a vazão.
|
|
8
|
+
# `move` do code-review.yml. Este job PUBLICA um documento (branch própria +
|
|
9
|
+
# Pull Request) e escreve o relatório de uso no comentário da issue com
|
|
10
|
+
# leitura-modificação-escrita; a trava impede que outro job do spec-wave na
|
|
11
|
+
# MESMA issue faça as duas coisas ao mesmo tempo. Entre issues diferentes não há
|
|
12
|
+
# mais disputa: cada documento tem a sua branch.
|
|
14
13
|
concurrency:
|
|
15
14
|
# Um run que NÃO vai fazer nada não pode disputar este grupo.
|
|
16
15
|
#
|
|
@@ -42,6 +41,17 @@ jobs:
|
|
|
42
41
|
permissions:
|
|
43
42
|
issues: write
|
|
44
43
|
contents: write
|
|
44
|
+
# `contents: write` continua necessário: o commit vai por Git Data API
|
|
45
|
+
# (createTree/createCommit/createRef), que é autorizada por ele. O que
|
|
46
|
+
# mudou foi o DESTINO — branch própria do documento, nunca a default.
|
|
47
|
+
#
|
|
48
|
+
# `pull-requests: write` é a permissão NOVA deste fluxo. Sem ela o commit
|
|
49
|
+
# é criado e o PR não, e o documento fica numa branch que ninguém vê.
|
|
50
|
+
#
|
|
51
|
+
# Atenção: o GITHUB_TOKEN só abre PR se "Allow GitHub Actions to create and
|
|
52
|
+
# approve pull requests" estiver ligado (Settings → Actions → General) —
|
|
53
|
+
# desligado por padrão em muitas organizações. `GH_PR_TOKEN` é a saída.
|
|
54
|
+
pull-requests: write
|
|
45
55
|
|
|
46
56
|
steps:
|
|
47
57
|
- uses: actions/checkout@v4
|
|
@@ -59,6 +69,7 @@ jobs:
|
|
|
59
69
|
run: spec-wave generate-bug --issue-number ${{ github.event.issue.number }}
|
|
60
70
|
env:
|
|
61
71
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
72
|
+
GH_PR_TOKEN: ${{ secrets.GH_PR_TOKEN }}
|
|
62
73
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
63
74
|
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
64
75
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
@@ -7,18 +7,19 @@ on:
|
|
|
7
7
|
# Trava por ITEM, no mesmo namespace do decompose.yml e do job `move` do
|
|
8
8
|
# code-review.yml. Duas razões:
|
|
9
9
|
#
|
|
10
|
-
# 1. spec, plan e decompose
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# paralelo — e o plan lê
|
|
14
|
-
#
|
|
10
|
+
# 1. spec, plan e decompose PUBLICAM documentos (branch própria + Pull
|
|
11
|
+
# Request). Em namespaces separados, aplicar `spec-wave:spec` e
|
|
12
|
+
# `spec-wave:plan` juntos na mesma Feature põe os dois para rodar em
|
|
13
|
+
# paralelo — e o plan lê a spec, que ainda estaria num PR sem merge.
|
|
14
|
+
# Hoje isso é recusa explícita, não plano gerado sem spec; ainda assim,
|
|
15
|
+
# serializar evita queimar um run para descobrir isso.
|
|
15
16
|
# 2. Os dois escrevem o relatório de uso no MESMO comentário da issue, com
|
|
16
17
|
# leitura-modificação-escrita (usage-report.mjs:152-160). Em paralelo, um
|
|
17
18
|
# sobrescreve o custo registrado pelo outro.
|
|
18
19
|
#
|
|
19
20
|
# Continua sendo por issue de propósito: serializar o repositório inteiro
|
|
20
|
-
# mataria a vazão
|
|
21
|
-
#
|
|
21
|
+
# mataria a vazão. A disputa ENTRE issues diferentes deixou de existir — cada
|
|
22
|
+
# documento tem branch própria, e o commit vai por API.
|
|
22
23
|
concurrency:
|
|
23
24
|
# Um run que NÃO vai fazer nada não pode disputar este grupo.
|
|
24
25
|
#
|
|
@@ -50,6 +51,17 @@ jobs:
|
|
|
50
51
|
permissions:
|
|
51
52
|
issues: write
|
|
52
53
|
contents: write
|
|
54
|
+
# `contents: write` continua necessário: o commit vai por Git Data API
|
|
55
|
+
# (createTree/createCommit/createRef), que é autorizada por ele. O que
|
|
56
|
+
# mudou foi o DESTINO — branch própria do documento, nunca a default.
|
|
57
|
+
#
|
|
58
|
+
# `pull-requests: write` é a permissão NOVA deste fluxo. Sem ela o commit
|
|
59
|
+
# é criado e o PR não, e o documento fica numa branch que ninguém vê.
|
|
60
|
+
#
|
|
61
|
+
# Atenção: o GITHUB_TOKEN só abre PR se "Allow GitHub Actions to create and
|
|
62
|
+
# approve pull requests" estiver ligado (Settings → Actions → General) —
|
|
63
|
+
# desligado por padrão em muitas organizações. `GH_PR_TOKEN` é a saída.
|
|
64
|
+
pull-requests: write
|
|
53
65
|
|
|
54
66
|
steps:
|
|
55
67
|
- uses: actions/checkout@v4
|
|
@@ -67,6 +79,7 @@ jobs:
|
|
|
67
79
|
run: spec-wave generate-plan --issue-number ${{ github.event.issue.number }}
|
|
68
80
|
env:
|
|
69
81
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
82
|
+
GH_PR_TOKEN: ${{ secrets.GH_PR_TOKEN }}
|
|
70
83
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
71
84
|
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
72
85
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
@@ -7,18 +7,19 @@ on:
|
|
|
7
7
|
# Trava por ITEM, no mesmo namespace do decompose.yml e do job `move` do
|
|
8
8
|
# code-review.yml. Duas razões:
|
|
9
9
|
#
|
|
10
|
-
# 1. spec, plan e decompose
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# paralelo — e o plan lê
|
|
14
|
-
#
|
|
10
|
+
# 1. spec, plan e decompose PUBLICAM documentos (branch própria + Pull
|
|
11
|
+
# Request). Em namespaces separados, aplicar `spec-wave:spec` e
|
|
12
|
+
# `spec-wave:plan` juntos na mesma Feature põe os dois para rodar em
|
|
13
|
+
# paralelo — e o plan lê a spec, que ainda estaria num PR sem merge.
|
|
14
|
+
# Hoje isso é recusa explícita, não plano gerado sem spec; ainda assim,
|
|
15
|
+
# serializar evita queimar um run para descobrir isso.
|
|
15
16
|
# 2. Os dois escrevem o relatório de uso no MESMO comentário da issue, com
|
|
16
17
|
# leitura-modificação-escrita (usage-report.mjs:152-160). Em paralelo, um
|
|
17
18
|
# sobrescreve o custo registrado pelo outro.
|
|
18
19
|
#
|
|
19
20
|
# Continua sendo por issue de propósito: serializar o repositório inteiro
|
|
20
|
-
# mataria a vazão
|
|
21
|
-
#
|
|
21
|
+
# mataria a vazão. A disputa ENTRE issues diferentes deixou de existir — cada
|
|
22
|
+
# documento tem branch própria, e o commit vai por API.
|
|
22
23
|
concurrency:
|
|
23
24
|
# Um run que NÃO vai fazer nada não pode disputar este grupo.
|
|
24
25
|
#
|
|
@@ -50,6 +51,17 @@ jobs:
|
|
|
50
51
|
permissions:
|
|
51
52
|
issues: write
|
|
52
53
|
contents: write
|
|
54
|
+
# `contents: write` continua necessário: o commit vai por Git Data API
|
|
55
|
+
# (createTree/createCommit/createRef), que é autorizada por ele. O que
|
|
56
|
+
# mudou foi o DESTINO — branch própria do documento, nunca a default.
|
|
57
|
+
#
|
|
58
|
+
# `pull-requests: write` é a permissão NOVA deste fluxo. Sem ela o commit
|
|
59
|
+
# é criado e o PR não, e o documento fica numa branch que ninguém vê.
|
|
60
|
+
#
|
|
61
|
+
# Atenção: o GITHUB_TOKEN só abre PR se "Allow GitHub Actions to create and
|
|
62
|
+
# approve pull requests" estiver ligado (Settings → Actions → General) —
|
|
63
|
+
# desligado por padrão em muitas organizações. `GH_PR_TOKEN` é a saída.
|
|
64
|
+
pull-requests: write
|
|
53
65
|
|
|
54
66
|
steps:
|
|
55
67
|
- uses: actions/checkout@v4
|
|
@@ -67,6 +79,7 @@ jobs:
|
|
|
67
79
|
run: spec-wave generate-spec --issue-number ${{ github.event.issue.number }}
|
|
68
80
|
env:
|
|
69
81
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
82
|
+
GH_PR_TOKEN: ${{ secrets.GH_PR_TOKEN }}
|
|
70
83
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
71
84
|
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
72
85
|
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
|
|
@@ -13,8 +13,21 @@ jobs:
|
|
|
13
13
|
# Modo de execução: `spec-wave mode local` cria a variável de repositório
|
|
14
14
|
# SPEC_WAVE_EXECUTION=local e este job passa a ser PULADO — run aparece como
|
|
15
15
|
# skipped e job que não roda não é faturado. `mode actions` remove a variável.
|
|
16
|
+
# PR de DOCUMENTO não é PR de implementação. O fluxo publica spec.md,
|
|
17
|
+
# plan.md, bug.md e decomposition.md em branches `spec-wave/*`, e deixar este
|
|
18
|
+
# workflow rodar em cima delas move o board por um PR que não implementa
|
|
19
|
+
# nada. Nos Actions um PR aberto pelo GITHUB_TOKEN não dispara workflow, mas
|
|
20
|
+
# um aberto no modo local (ou via GH_PR_TOKEN) dispara.
|
|
21
|
+
#
|
|
22
|
+
# A guarda cobre também `spec-wave/update-v*`, do `update --branch` — que
|
|
23
|
+
# tampouco implementa uma Story.
|
|
24
|
+
#
|
|
25
|
+
# Aqui a guarda é INDISPENSÁVEL, não defensiva: `pull_request_review`
|
|
26
|
+
# dispara por uma aprovação HUMANA, independentemente de quem abriu o
|
|
27
|
+
# PR. Aprovar o PR da spec moveria a Feature para 🧪 QA.
|
|
16
28
|
if: >
|
|
17
29
|
vars.SPEC_WAVE_EXECUTION != 'local' &&
|
|
30
|
+
!startsWith(github.event.pull_request.head.ref, 'spec-wave/') &&
|
|
18
31
|
github.event.review.state == 'approved'
|
|
19
32
|
runs-on: ubuntu-latest
|
|
20
33
|
permissions:
|