@brunosps00/dev-workflow 2.0.0 → 2.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/.claude-plugin/marketplace.json +1 -0
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +176 -0
- package/README.md +10 -5
- package/lib/build-plugin.js +4 -1
- package/lib/constants.js +8 -2
- package/lib/init.js +26 -0
- package/lib/validate.js +21 -0
- package/package.json +1 -1
- package/scaffold/en/agent-instructions.md +2 -0
- package/scaffold/en/commands/dw-autopilot.md +2 -0
- package/scaffold/en/commands/dw-brainstorm.md +12 -8
- package/scaffold/en/commands/dw-bugfix.md +4 -2
- package/scaffold/en/commands/dw-claude-run.md +1 -1
- package/scaffold/en/commands/dw-codex-run.md +1 -1
- package/scaffold/en/commands/dw-copilot-run.md +1 -1
- package/scaffold/en/commands/dw-harness-audit.md +2 -0
- package/scaffold/en/commands/dw-help.md +6 -2
- package/scaffold/en/commands/dw-pause.md +1 -0
- package/scaffold/en/commands/dw-plan.md +2 -2
- package/scaffold/en/commands/dw-refactor.md +1 -0
- package/scaffold/en/commands/dw-report.md +169 -0
- package/scaffold/en/commands/dw-review.md +33 -2
- package/scaffold/en/commands/dw-run.md +3 -1
- package/scaffold/en/commands/dw-triage.md +220 -0
- package/scaffold/en/commands/dw-worktree.md +100 -0
- package/scaffold/en/templates/idea-onepager.md +28 -0
- package/scaffold/en/templates/task-template.md +1 -0
- package/scaffold/en/templates/tasks-template.md +9 -8
- package/scaffold/en/templates/triage-needs-info-template.md +23 -0
- package/scaffold/en/templates/triage-out-of-scope-template.md +36 -0
- package/scaffold/en/templates/triage-record-template.md +88 -0
- package/scaffold/pt-br/agent-instructions.md +2 -0
- package/scaffold/pt-br/commands/dw-autopilot.md +83 -81
- package/scaffold/pt-br/commands/dw-brainstorm.md +12 -9
- package/scaffold/pt-br/commands/dw-bugfix.md +4 -2
- package/scaffold/pt-br/commands/dw-claude-run.md +20 -20
- package/scaffold/pt-br/commands/dw-codex-run.md +20 -20
- package/scaffold/pt-br/commands/dw-context-budget.md +10 -10
- package/scaffold/pt-br/commands/dw-copilot-run.md +21 -21
- package/scaffold/pt-br/commands/dw-dockerize.md +102 -102
- package/scaffold/pt-br/commands/dw-find-skills.md +52 -52
- package/scaffold/pt-br/commands/dw-goal.md +41 -41
- package/scaffold/pt-br/commands/dw-harness-audit.md +13 -11
- package/scaffold/pt-br/commands/dw-help.md +6 -2
- package/scaffold/pt-br/commands/dw-intel.md +70 -70
- package/scaffold/pt-br/commands/dw-learn.md +24 -24
- package/scaffold/pt-br/commands/dw-new-project.md +88 -88
- package/scaffold/pt-br/commands/dw-open-design.md +53 -53
- package/scaffold/pt-br/commands/dw-opportunities.md +45 -45
- package/scaffold/pt-br/commands/dw-pause.md +40 -39
- package/scaffold/pt-br/commands/dw-plan.md +2 -2
- package/scaffold/pt-br/commands/dw-refactor.md +31 -30
- package/scaffold/pt-br/commands/dw-report.md +169 -0
- package/scaffold/pt-br/commands/dw-resume.md +22 -22
- package/scaffold/pt-br/commands/dw-review.md +33 -2
- package/scaffold/pt-br/commands/dw-run.md +3 -1
- package/scaffold/pt-br/commands/dw-skill-health.md +10 -10
- package/scaffold/pt-br/commands/dw-subtask-complete.md +4 -4
- package/scaffold/pt-br/commands/dw-subtask-start.md +4 -4
- package/scaffold/pt-br/commands/dw-triage.md +220 -0
- package/scaffold/pt-br/commands/dw-worktree.md +100 -0
- package/scaffold/pt-br/templates/bugfix-summary-template.md +20 -20
- package/scaffold/pt-br/templates/concerns-template.md +20 -20
- package/scaffold/pt-br/templates/idea-onepager.md +28 -0
- package/scaffold/pt-br/templates/project-onepager.md +32 -32
- package/scaffold/pt-br/templates/state-template.md +13 -13
- package/scaffold/pt-br/templates/task-template.md +1 -0
- package/scaffold/pt-br/templates/tasks-template.md +9 -8
- package/scaffold/pt-br/templates/triage-needs-info-template.md +23 -0
- package/scaffold/pt-br/templates/triage-out-of-scope-template.md +36 -0
- package/scaffold/pt-br/templates/triage-record-template.md +88 -0
- package/scaffold/scripts/hooks/git-guardrails.mjs +42 -24
- package/scaffold/scripts/lib/worktree-gc.mjs +460 -0
- package/scaffold/skill-registry.json +1 -1
- package/scaffold/skills/dw-cli-run/SKILL.md +10 -1
- package/scaffold/skills/dw-debug-protocol/SKILL.md +2 -0
- package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +60 -1
- package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +14 -14
- package/scaffold/skills/dw-grilling/SKILL.md +17 -7
- package/scaffold/skills/dw-grilling/references/decision-tree.md +30 -7
- package/scaffold/skills/dw-simplification/references/deep-modules.md +50 -0
- package/scaffold/skills/dw-testing-discipline/SKILL.md +3 -1
- package/scaffold/skills/dw-testing-discipline/references/tdd-loop.md +83 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
|
|
2
|
+
Você é um agent de retomada de sessão. Seu trabalho é ler `.dw/STATE.md`, se orientar e orientar o usuário, e rotear para o próximo passo mais útil. Este comando é o inverso do `/dw-pause`.
|
|
3
3
|
|
|
4
4
|
## Quando Usar
|
|
5
|
-
- Use quando o
|
|
6
|
-
- Use proativamente no
|
|
5
|
+
- Use quando o usuário disser "retomar trabalho", "continuar", "onde paramos?", "voltar de onde parei", ou começar uma sessão nova em um projeto existente
|
|
6
|
+
- Use proativamente no início de qualquer sessão que abrir um projeto com `.dw/STATE.md` não-vazio e o usuário ainda não tiver expressado uma intenção
|
|
7
7
|
|
|
8
|
-
##
|
|
9
|
-
**Predecessor:** `/dw-pause` (
|
|
8
|
+
## Posição na Pipeline
|
|
9
|
+
**Predecessor:** `/dw-pause` (sessão anterior) | **Sucessor:** depende do que está aberto (tipicamente `/dw-run --resume`, `/dw-bugfix`, `/dw-plan`, `/dw-qa` ou `/dw-review`)
|
|
10
10
|
|
|
11
11
|
## Local do Arquivo
|
|
12
12
|
- Alvo read-only: `.dw/STATE.md`
|
|
@@ -15,20 +15,20 @@ Voce e um agent de retomada de sessao. Seu trabalho e ler `.dw/STATE.md`, se ori
|
|
|
15
15
|
## Workflow
|
|
16
16
|
|
|
17
17
|
### 1. Ler STATE.md
|
|
18
|
-
- Se `.dw/STATE.md`
|
|
19
|
-
- Se `STATE.md` existir mas toda
|
|
18
|
+
- Se `.dw/STATE.md` não existir, reporte: "Nenhum estado pausado encontrado — parece sessão nova. Rode `/dw-help` para próximos passos." Pare aqui.
|
|
19
|
+
- Se `STATE.md` existir mas toda seção for `_nenhum_`, reporte: "STATE.md vazio — nada a retomar. Me diga o que você quer fazer."
|
|
20
20
|
|
|
21
21
|
### 2. Cross-reference com disco
|
|
22
22
|
Verifique que o estado ainda bate com o filesystem:
|
|
23
23
|
|
|
24
24
|
- Para cada Open Loop referenciando path de PRD, rode `ls` em `.dw/spec/<slug>/`. Se faltar, sinalize `[stale: PRD nao encontrado]` e pergunte se quer remover.
|
|
25
25
|
- Para cada Open Loop referenciando slug de bugfix, cheque `.dw/bugfixes/<NNN-slug>/`.
|
|
26
|
-
- Para cada Bloqueio referenciando sistema externo,
|
|
26
|
+
- Para cada Bloqueio referenciando sistema externo, não verifique — apenas mostre.
|
|
27
27
|
- Se `last_paused` no frontmatter tem mais de 14 dias, sinalize com destaque (estado pode estar stale).
|
|
28
28
|
|
|
29
29
|
### 3. Produzir TLDR
|
|
30
30
|
|
|
31
|
-
Apresente um resumo conciso, **
|
|
31
|
+
Apresente um resumo conciso, **não o STATE.md cru**:
|
|
32
32
|
|
|
33
33
|
```
|
|
34
34
|
## Onde voce parou
|
|
@@ -50,20 +50,20 @@ Ultima pausa: YYYY-MM-DD (Nd atras)
|
|
|
50
50
|
|
|
51
51
|
Mantenha o TLDR em menos de 30 linhas. Se STATE.md tiver mais, resuma e ofereca `cat .dw/STATE.md` como follow-up.
|
|
52
52
|
|
|
53
|
-
### 4. Sugerir
|
|
53
|
+
### 4. Sugerir próximo passo
|
|
54
54
|
|
|
55
55
|
Baseado no TLDR, roteie para um comando concreto. Use estas heuristicas:
|
|
56
56
|
|
|
57
57
|
| Sinal mais forte no STATE.md | Comando sugerido |
|
|
58
58
|
|------------------------------|------------------|
|
|
59
|
-
| Open Loop num PRD em
|
|
60
|
-
| Open Loop num PRD em
|
|
61
|
-
| Open Loop num PRD em
|
|
59
|
+
| Open Loop num PRD em estágio `tasks/` | `/dw-run --resume` |
|
|
60
|
+
| Open Loop num PRD em estágio `techspec` | `/dw-plan techspec` |
|
|
61
|
+
| Open Loop num PRD em estágio `prd` | `/dw-plan tasks` (se PRD aprovado) ou continuar PRD |
|
|
62
62
|
| Open Loop num slug de bugfix | `/dw-bugfix --resume <slug>` ou `/dw-qa --bugfix <slug>` |
|
|
63
|
-
| Bloqueio esperando input externo | Sugerir que o
|
|
64
|
-
|
|
|
63
|
+
| Bloqueio esperando input externo | Sugerir que o usuário resolva o bloqueio primeiro |
|
|
64
|
+
| Só Todos e Decisões, sem trabalho ativo | Perguntar o que começar |
|
|
65
65
|
|
|
66
|
-
Formule a
|
|
66
|
+
Formule a sugestão como pergunta, não como ordem:
|
|
67
67
|
|
|
68
68
|
```
|
|
69
69
|
Quer que eu rode <comando sugerido>?
|
|
@@ -73,18 +73,18 @@ Quer que eu rode <comando sugerido>?
|
|
|
73
73
|
|
|
74
74
|
### 5. Atualizar frontmatter do STATE.md
|
|
75
75
|
|
|
76
|
-
Setar `last_resumed` para a data de hoje (YYYY-MM-DD).
|
|
76
|
+
Setar `last_resumed` para a data de hoje (YYYY-MM-DD). Não modificar conteúdo das seções — agora a sessão está de volta e isso é do usuário.
|
|
77
77
|
|
|
78
|
-
## Comportamento
|
|
78
|
+
## Comportamento Obrigatório
|
|
79
79
|
|
|
80
|
-
<critical>NUNCA auto-execute o comando sugerido. `/dw-resume`
|
|
80
|
+
<critical>NUNCA auto-execute o comando sugerido. `/dw-resume` só propoe; o usuário confirma antes de qualquer `/dw-run`, `/dw-plan` ou `/dw-bugfix`.</critical>
|
|
81
81
|
|
|
82
|
-
<critical>NUNCA fabrique resultados de stale-detection. Se
|
|
82
|
+
<critical>NUNCA fabrique resultados de stale-detection. Se você não rodou `ls`, não reporte que o arquivo existe ou não.</critical>
|
|
83
83
|
|
|
84
|
-
<critical>NUNCA jogue o STATE.md inteiro no chat. Resuma. Arquivos de estado longos sinalizam que
|
|
84
|
+
<critical>NUNCA jogue o STATE.md inteiro no chat. Resuma. Arquivos de estado longos sinalizam que compactação e necessária — sugira `/dw-pause` para compactar da próxima vez.</critical>
|
|
85
85
|
|
|
86
86
|
## Inspirado em
|
|
87
87
|
|
|
88
|
-
Este comando adapta o pattern de session-handoff de [`tech-leads-club/agent-skills/tlc-spec-driven`](https://github.com/tech-leads-club/agent-skills/tree/main/packages/skills-catalog/skills/(development)/tlc-spec-driven) (CC-BY-4.0, Felipe Rodrigues).
|
|
88
|
+
Este comando adapta o pattern de session-handoff de [`tech-leads-club/agent-skills/tlc-spec-driven`](https://github.com/tech-leads-club/agent-skills/tree/main/packages/skills-catalog/skills/(development)/tlc-spec-driven) (CC-BY-4.0, Felipe Rodrigues). Adaptações: heuristicas de routing mapeiam conteúdo do STATE.md para comandos `dw-*` específicos; cross-reference com `.dw/spec/` e `.dw/bugfixes/` para detectar staleness; nunca auto-executa.
|
|
89
89
|
|
|
90
90
|
</system_instructions>
|
|
@@ -19,6 +19,7 @@ Você é o orquestrador de review. Roda Level 2 (PRD compliance / cobertura) e L
|
|
|
19
19
|
| `/dw-review --coverage-only` | Apenas Level 2 — mapeia cada requisito do PRD (ou escopo do bugfix) para o código que entrega. Pula qualidade. |
|
|
20
20
|
| `/dw-review --code-only` | Apenas Level 3 — qualidade / convenção / security checks. Pula mapeamento de PRD/escopo. |
|
|
21
21
|
| `/dw-review --bugfix <NNN-slug>` | Aponta para um bugfix em `.dw/bugfixes/NNN-slug/` em vez de um PRD. Level 2 mapeia o escopo do bugfix (TASK.md + fix-report.md + SUMMARY.md) para o código que entrega o fix; Level 3 checa o diff. Output: `.dw/bugfixes/NNN-slug/review/`. |
|
|
22
|
+
| `/dw-review --since <ref>` | Review avulso contra um ponto de comparação verificado. Roda os níveis normais selecionados, mas o diff é calculado a partir de `<ref>` após o preflight de `--since` abaixo. |
|
|
22
23
|
|
|
23
24
|
## Entradas
|
|
24
25
|
|
|
@@ -26,7 +27,8 @@ Você é o orquestrador de review. Roda Level 2 (PRD compliance / cobertura) e L
|
|
|
26
27
|
|----------|-----------|---------|
|
|
27
28
|
| `{{PRD_PATH}}` | Caminho do dir PRD (auto-detect da branch ativa se omitido; ignorado quando `--bugfix` é usado) | `.dw/spec/prd-invoice-export` |
|
|
28
29
|
| `{{BUGFIX_SLUG}}` | Slug do bugfix quando a flag `--bugfix` é usada | `001-login-nao-funciona` |
|
|
29
|
-
| `{{
|
|
30
|
+
| `{{SINCE_REF}}` | Ref Git usado quando `--since <ref>` é passado | `v2.0.0`, `HEAD~3`, `main` |
|
|
31
|
+
| `{{MODE}}` | `--coverage-only` / `--code-only` / `--bugfix <slug>` / `--since <ref>` (opcional; default = ambos, target = PRD) | — |
|
|
30
32
|
|
|
31
33
|
## Resolução de Target
|
|
32
34
|
|
|
@@ -38,6 +40,24 @@ O review roda contra um de dois tipos de target. Compute `<target>` UMA VEZ no i
|
|
|
38
40
|
|
|
39
41
|
Quando o target Bugfix é usado, o mapeamento de cobertura (Level 2) opera sobre as tasks numeradas do `TASK.md` (não FR-N.M); uma task é ENTREGUE quando (a) os arquivos que ela alegou tocar estão no diff e (b) o teste de regressão referenciado em `fix-report.md` existe e roda. Código órfão em modo bugfix é qualquer coisa no diff que não corresponde a uma task numerada — sinal forte de que o safety valve deveria ter escalado para `/dw-plan`.
|
|
40
42
|
|
|
43
|
+
## Preflight de `--since <ref>`
|
|
44
|
+
|
|
45
|
+
`--since` é opt-in. O review PRD/bugfix padrão continua usando o fluxo de ponto de criação da branch PRD / base branch sem mudança.
|
|
46
|
+
|
|
47
|
+
Quando `--since <ref>` for passado, rode este preflight antes de qualquer análise Level 2 ou Level 3:
|
|
48
|
+
|
|
49
|
+
1. Resolver o ponto fixo:
|
|
50
|
+
- Rode `git rev-parse --verify --quiet <ref>^{commit}`.
|
|
51
|
+
- Se falhar, aborte com: `REPROVADO: o ref de --since '<ref>' não resolve para um commit. Passe um commit, tag ou branch válido e rode novamente /dw-review --since <ref>.`
|
|
52
|
+
2. Montar o range do review:
|
|
53
|
+
- Comando de diff: `git diff <ref>...HEAD`.
|
|
54
|
+
- Comando de commits: `git log <ref>..HEAD --oneline`.
|
|
55
|
+
- Escolha: o diff three-dot é usado para revisar o que `HEAD` mudou desde o merge-base com o ref verificado, mantendo a semântica de review de PR e evitando mudanças que existem só em `<ref>`.
|
|
56
|
+
3. Confirmar que o diff não está vazio:
|
|
57
|
+
- Rode `git diff --name-only <ref>...HEAD`.
|
|
58
|
+
- Se não retornar paths, aborte com: `APROVADO: sem mudanças para revisar em git diff <ref>...HEAD. Escolha um ref --since anterior ou use o review padrão PRD/base-branch.`
|
|
59
|
+
4. Registre o ref resolvido, o comando de diff e o comando de commits em todos os relatórios gerados, para que o review seja reproduzível.
|
|
60
|
+
|
|
41
61
|
## Skills Complementares
|
|
42
62
|
|
|
43
63
|
Quando disponíveis em `./.agents/skills/`, são invocadas como apoio analítico:
|
|
@@ -107,6 +127,9 @@ Salvo em `<target>/QA/review-coverage.md` (target PRD) ou `<target>/review/revie
|
|
|
107
127
|
```markdown
|
|
108
128
|
# Coverage Review
|
|
109
129
|
|
|
130
|
+
**Comando de diff:** git diff <effective-base-or-ref>...HEAD
|
|
131
|
+
**Range de commits:** git log <effective-base-or-ref>..HEAD --oneline
|
|
132
|
+
|
|
110
133
|
## Status por Requisito Funcional
|
|
111
134
|
|
|
112
135
|
| FR | Descrição | Status | Evidência | Commit |
|
|
@@ -133,7 +156,7 @@ Se FALTANDO > 0, o veredicto sugere revisitar `/dw-plan tasks` pra escopar ou `/
|
|
|
133
156
|
|
|
134
157
|
### Comportamento
|
|
135
158
|
|
|
136
|
-
1. **Análise de diff:** identificar o que mudou desde a branch PRD ser criada (`git diff <base-branch>...HEAD`).
|
|
159
|
+
1. **Análise de diff:** identificar o que mudou desde a branch PRD ser criada (`git diff <base-branch>...HEAD`). Se `--since <ref>` for usado, use o comando de diff do preflight.
|
|
137
160
|
|
|
138
161
|
2. **Conformidade com Rules** (contra `.dw/rules/`):
|
|
139
162
|
- Padrões gerais: sem `any` em TS, sem `console.log` em prod, error handling, multi-tenancy.
|
|
@@ -176,6 +199,13 @@ Salvo em `<target>/QA/dw-code-review.md` (target PRD) ou `<target>/review/dw-cod
|
|
|
176
199
|
- **APROVADO COM RESSALVAS** — verde mas findings valem corrigir em follow-up (filed com severities).
|
|
177
200
|
- **REPROVADO** — ao menos um hard gate falhou. Especifique qual.
|
|
178
201
|
|
|
202
|
+
O relatório DEVE incluir:
|
|
203
|
+
|
|
204
|
+
```markdown
|
|
205
|
+
**Comando de diff:** git diff <effective-base-or-ref>...HEAD
|
|
206
|
+
**Range de commits:** git log <effective-base-or-ref>..HEAD --oneline
|
|
207
|
+
```
|
|
208
|
+
|
|
179
209
|
## Output consolidado (modo padrão)
|
|
180
210
|
|
|
181
211
|
Quando ambos níveis rodam, relatório consolidado em `<target>/QA/review-consolidated.md` (target PRD) ou `<target>/review/review-consolidated.md` (target Bugfix):
|
|
@@ -188,6 +218,7 @@ Quando ambos níveis rodam, relatório consolidado em `<target>/QA/review-consol
|
|
|
188
218
|
**Verification Report:** PASS
|
|
189
219
|
**Security Audit:** PASS (ou REPROVADO com motivos)
|
|
190
220
|
**Constitution Compliance:** PASS (ou violações listadas)
|
|
221
|
+
**Comando de diff:** git diff <effective-base-or-ref>...HEAD
|
|
191
222
|
|
|
192
223
|
## Veredicto geral
|
|
193
224
|
<linha>
|
|
@@ -34,6 +34,7 @@ Quando disponíveis em `./.agents/skills/`, estas skills são invocadas por task
|
|
|
34
34
|
- Instincts (lazy): no início da task, carregue também qualquer instinct de alta confiança (`.dw/memory/instincts/`, confidence ≥0.7) cujo `trigger` case com a task — convenções aprendidas promovidas pelo `/dw-learn`. Case por trigger; nunca carregue o conjunto inteiro.
|
|
35
35
|
- `dw-execute-phase`: fornece agentes `plan-checker` (verificação goal-backward em 6 dimensões antes do código ser tocado) e `executor` (commit atômico + deviation handling).
|
|
36
36
|
- `dw-testing-discipline`: aplica placement doctrine, 6 agent guardrails e 25 anti-patterns ao adicionar testes.
|
|
37
|
+
- `dw-testing-discipline` modo test-first: SOMENTE quando o texto da task ou o usuário disser explicitamente `TDD`, `test first` ou `red-green-refactor`, execute essa task por `references/tdd-loop.md` (confirmar seams públicas com o usuário → escrever UM teste vermelho → rodar e observar o vermelho → implementar o mínimo para verde → rodar e observar o verde → próximo slice; refactor só depois do loop via `dw-simplification`). Este não é o modo padrão do `/dw-run`.
|
|
37
38
|
- `dw-ui-discipline`: quando task toca UI, as 4 grounding questions precisam ser respondidas antes de qualquer decisão visual.
|
|
38
39
|
- `dw-llm-eval`: quando task toca código de feature AI, regras de reference dataset + oracle ladder se aplicam.
|
|
39
40
|
- `dw-minimalism`: **antes de escrever código novo** — sobe o decision ladder YAGNI (precisa existir? reusar? stdlib? nativo? dep instalada? uma linha?) na intensidade ativa, depois escreve o mínimo. Passa novas dependências pro `dw-search-first`.
|
|
@@ -92,6 +93,7 @@ Quando disponíveis em `./.agents/skills/`, estas skills são invocadas por task
|
|
|
92
93
|
|
|
93
94
|
### Comportamento
|
|
94
95
|
|
|
96
|
+
0. **Armar o loop de progresso:** invoque `/dw-report` (contrato de auto-arme — idempotente quando `.dw/reports/.active.json` já está vivo; pulado quando `DW_REPORT_AUTO=off`). Ele reporta feito / fazendo / falta a cada 10 minutos enquanto as waves rodam e se desarma sozinho com um report final após o Level 2 review final.
|
|
95
97
|
1. **Plan check (via agente `dw-execute-phase/plan-checker`):**
|
|
96
98
|
- Verificação goal-backward em 6 dimensões: essas tasks vão de fato entregar o que o PRD promete?
|
|
97
99
|
- Se FAIL em qualquer dimensão, PARE e reporte ao usuário antes de qualquer código ser tocado.
|
|
@@ -132,7 +134,7 @@ Quando disponíveis em `./.agents/skills/`, estas skills são invocadas por task
|
|
|
132
134
|
|
|
133
135
|
1. Ler `active-session.md` pra determinar onde a sessão parou.
|
|
134
136
|
2. Surface ao usuário: "Resumindo da wave N, task X.0. Já completadas: <lista>. Continuar?"
|
|
135
|
-
3. Em confirmação, resume da próxima task pendente com mesmo comportamento Modo 2.
|
|
137
|
+
3. Em confirmação, resume da próxima task pendente com mesmo comportamento Modo 2 (incluindo o passo 0 — armar `/dw-report`).
|
|
136
138
|
|
|
137
139
|
Se `active-session.md` não existe mas tasks não-completadas existem, trate como Modo 2 fresh start.
|
|
138
140
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
|
|
2
|
+
Você é o auditor de saúde de skills e agentes do dev-workflow.
|
|
3
3
|
|
|
4
4
|
## Quando Usar
|
|
5
|
-
- Use depois de adicionar skills de
|
|
5
|
+
- Use depois de adicionar skills de catálogos externos.
|
|
6
6
|
- Use quando o contexto estiver pesado ou skills se sobrepuserem.
|
|
7
7
|
- Use antes de promover um aprendizado para skill reutilizavel.
|
|
8
8
|
|
|
@@ -11,21 +11,21 @@ Voce e o auditor de saude de skills e agentes do dev-workflow.
|
|
|
11
11
|
2. Agrupe skills por `kind`: `protocol`, `domain-pack`, `recipe-pack`, `asset-pack`.
|
|
12
12
|
3. Valide que toda skill tem trigger, output esperado, owner, load policy e limite de contexto.
|
|
13
13
|
4. Valide que todo `SKILL.md` bundled tem contrato `## Structured Return` com `Status`, `Scope`, `Evidence`, `Artifacts`, `Decisions`, `Risks` e `Next Step`.
|
|
14
|
-
5. Confirme que o vocabulario de `Status`
|
|
15
|
-
6. Aponte nomes duplicados, `SKILL.md` ausente, frontmatter ausente, `SKILL.md` grande demais, metadata de output esperado desatualizada, e references/assets lidos sem trigger
|
|
14
|
+
5. Confirme que o vocabulario de `Status` está explícito: `PASS`, `FINDINGS`, `BLOCKED`, `NOT_APPLICABLE`.
|
|
15
|
+
6. Aponte nomes duplicados, `SKILL.md` ausente, frontmatter ausente, `SKILL.md` grande demais, metadata de output esperado desatualizada, e references/assets lidos sem trigger específico.
|
|
16
16
|
7. Recomende manter, compactar entrypoint, mesclar, reclassificar, adicionar retorno estruturado, ou remover da visibilidade core.
|
|
17
17
|
|
|
18
18
|
## Taxonomia
|
|
19
19
|
|
|
20
|
-
- `protocol`: workflow/gate/checklist acionavel que muda a
|
|
21
|
-
- `domain-pack`: expertise de
|
|
20
|
+
- `protocol`: workflow/gate/checklist acionavel que muda a execução.
|
|
21
|
+
- `domain-pack`: expertise de domínio usada só quando a tarefa entra naquele domínio.
|
|
22
22
|
- `recipe-pack`: receitas/snippets curados carregados por stack ou modo.
|
|
23
|
-
- `asset-pack`:
|
|
23
|
+
- `asset-pack`: mídia/exemplos/assets carregados só para tasks correspondentes.
|
|
24
24
|
|
|
25
|
-
`SKILL.md` deve ser um roteador/protocolo curto. Regras longas, exemplos, paletas, receitas, services e assets ficam em references/assets/rules/recipes e
|
|
25
|
+
`SKILL.md` deve ser um roteador/protocolo curto. Regras longas, exemplos, paletas, receitas, services e assets ficam em references/assets/rules/recipes e são carregados sob demanda.
|
|
26
26
|
|
|
27
|
-
##
|
|
28
|
-
Retorne um
|
|
27
|
+
## Saída
|
|
28
|
+
Retorne um relatório conciso com uma seção de retorno estruturado. Não delete arquivos.
|
|
29
29
|
|
|
30
30
|
Inclua:
|
|
31
31
|
- Status geral: `PASS`, `FINDINGS` ou `BLOCKED`.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
|
|
2
|
+
Você registra um handoff estruturado de subagente.
|
|
3
3
|
|
|
4
4
|
## Quando Usar
|
|
5
|
-
- Use dentro da
|
|
5
|
+
- Use dentro da sessão child/subagente quando a subtarefa atribuída estiver completa, bloqueada ou fora de budget.
|
|
6
6
|
|
|
7
|
-
## Formato
|
|
7
|
+
## Formato Obrigatório
|
|
8
8
|
|
|
9
9
|
```markdown
|
|
10
10
|
## Objective
|
|
@@ -34,7 +34,7 @@ Voce registra um handoff estruturado de subagente.
|
|
|
34
34
|
npx @brunosps00/dev-workflow subtask complete --slug=<slug> --file=<handoff.md>
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Retorne apenas
|
|
37
|
+
Retorne apenas evidência resumida. Não inclua logs completos nem dumps de transcript.
|
|
38
38
|
|
|
39
39
|
Final marker: `## SUBTASK HANDOFF RECORDED`
|
|
40
40
|
</system_instructions>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<system_instructions>
|
|
2
|
-
|
|
2
|
+
Você cria input packets minimos para subagentes.
|
|
3
3
|
|
|
4
4
|
## Quando Usar
|
|
5
5
|
- Use quando uma subtarefa read-only, QA, review ou build-fix puder rodar separada do contexto principal.
|
|
6
|
-
- Use quando o output seria volumoso: logs, grep amplo,
|
|
6
|
+
- Use quando o output seria volumoso: logs, grep amplo, evidência de teste, QA em browser, review de segurança.
|
|
7
7
|
|
|
8
8
|
## Processo
|
|
9
|
-
1. Escolha o agente instalado mais
|
|
10
|
-
2. Escreva objetivo estreito, arquivos/fontes permitidos, constraints, output esperado, budget de contexto e
|
|
9
|
+
1. Escolha o agente instalado mais específico em `.agents/agents/README.md` ou `scaffold/agent-registry.json`.
|
|
10
|
+
2. Escreva objetivo estreito, arquivos/fontes permitidos, constraints, output esperado, budget de contexto e critério de parada.
|
|
11
11
|
3. Rode:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
<system_instructions>
|
|
2
|
+
Você é a borda de triagem de intake do workspace atual. Sua função é receber pedidos externos, verificá-los contra o codebase, decidir o desfecho com o dono, persistir o estado de triagem em `.dw/`, e só então rotear para o pipeline dev-workflow existente.
|
|
3
|
+
|
|
4
|
+
<critical>`/dw-triage` fica ANTES de `/dw-bugfix`, `/dw-brainstorm`, `/dw-plan` e `/dw-run`. Ele não substitui nenhum deles.</critical>
|
|
5
|
+
<critical>Local-first: `.dw/triage/**` é a fonte durável da verdade. Acesso ao GitHub via `gh` é apenas enriquecimento opcional.</critical>
|
|
6
|
+
<critical>Nunca escreva um brief downstream a partir de uma alegação não verificada. Verificação é o ponto deste comando.</critical>
|
|
7
|
+
|
|
8
|
+
## Quando Usar
|
|
9
|
+
- Use quando um bug report, feature request, escalonamento de suporte, issue ou PR externo chega e precisa de uma decisão de intake antes do planejamento ou da execução normal
|
|
10
|
+
- Use quando o pedido pode ser redundante, já rejeitado, subespecificado, ou precisa de decisão humana antes de entrar no pipeline
|
|
11
|
+
- NÃO use para corrigir diretamente um bug já aceito; use `/dw-bugfix`
|
|
12
|
+
- NÃO use para planejar diretamente uma melhoria já aceita; use `/dw-plan prd`
|
|
13
|
+
- NÃO use para ideação vaga sem item de intake; use `/dw-brainstorm`
|
|
14
|
+
|
|
15
|
+
## Posição no Pipeline
|
|
16
|
+
**Antecessor:** pedido externo (paste, arquivo, issue, PR) | **Sucessor:** `/dw-brainstorm --mode=grill`, `/dw-bugfix`, `/dw-plan prd`, `/dw-run`, ou nenhuma ação downstream
|
|
17
|
+
|
|
18
|
+
## Entradas
|
|
19
|
+
|
|
20
|
+
| Variável | Descrição | Exemplo |
|
|
21
|
+
|----------|-----------|---------|
|
|
22
|
+
| `{{SOURCE}}` | Fonte do pedido: texto colado, caminho local, URL de issue/PR, número de issue/PR, ou branch/ref | `.dw/inbox/relato.md`, `#123`, `https://github.com/org/repo/pull/42` |
|
|
23
|
+
| `{{MODE}}` | Intenção opcional do dono | `--bug`, `--enhancement`, `--pr`, `--offline`, `--no-github-write` |
|
|
24
|
+
|
|
25
|
+
## Localização dos Arquivos
|
|
26
|
+
|
|
27
|
+
**Registro de triagem — sempre criado depois do desfecho aprovado pelo dono:**
|
|
28
|
+
|
|
29
|
+
- `.dw/triage/NNN-<slug>.md`
|
|
30
|
+
- `NNN` tem 3 dígitos, sequencial entre todos os registros de triagem já criados
|
|
31
|
+
- `<slug>` vem em kebab-case do conceito de domínio, não apenas da redação do pedido
|
|
32
|
+
- Use `.dw/templates/triage-record-template.md`
|
|
33
|
+
|
|
34
|
+
Isto segue o precedente de índice de `.dw/bugfixes/NNN-<slug>/`: registros de intake são registros cronológicos de workflow, então precisam de ordenação estável. Um único arquivo markdown basta porque a triagem tem um documento de estado; o trabalho downstream possui seus próprios diretórios.
|
|
35
|
+
|
|
36
|
+
**Notas de needs-info:**
|
|
37
|
+
|
|
38
|
+
- Guardadas no mesmo registro `.dw/triage/NNN-<slug>.md`, sob `## Needs Info`
|
|
39
|
+
- Use `.dw/templates/triage-needs-info-template.md` como corpo da seção quando houver perguntas em aberto
|
|
40
|
+
|
|
41
|
+
**Memória de out-of-scope — apenas para conceitos rejeitados:**
|
|
42
|
+
|
|
43
|
+
- `.dw/out-of-scope/<concept>.md`
|
|
44
|
+
- `<concept>` é um slug estável do conceito de domínio, não uma citação do pedido
|
|
45
|
+
- Use `.dw/templates/triage-out-of-scope-template.md`
|
|
46
|
+
- NÃO escreva `.dw/out-of-scope/**` para "já implementado"; aponte para a implementação existente
|
|
47
|
+
|
|
48
|
+
**Descoberta do próximo NNN:** liste `.dw/triage/`, parseie o prefixo inicial de 3 dígitos de cada `*.md`, tome `max + 1` ou `1` se estiver vazio.
|
|
49
|
+
|
|
50
|
+
## Modelo de Estado
|
|
51
|
+
|
|
52
|
+
Todo item de triagem carrega exatamente uma categoria e exatamente um estado.
|
|
53
|
+
|
|
54
|
+
Categorias:
|
|
55
|
+
- `bug`
|
|
56
|
+
- `enhancement`
|
|
57
|
+
|
|
58
|
+
Estados:
|
|
59
|
+
- `needs-triage`
|
|
60
|
+
- `needs-info`
|
|
61
|
+
- `ready-for-work`
|
|
62
|
+
- `needs-human`
|
|
63
|
+
- `wontfix`
|
|
64
|
+
|
|
65
|
+
Transições:
|
|
66
|
+
- `needs-triage` -> `needs-info`
|
|
67
|
+
- `needs-triage` -> `ready-for-work`
|
|
68
|
+
- `needs-triage` -> `needs-human`
|
|
69
|
+
- `needs-triage` -> `wontfix`
|
|
70
|
+
- `needs-info` -> `needs-triage` quando o autor responde
|
|
71
|
+
|
|
72
|
+
Se o registro atual, labels da fonte ou input do dono indicarem estados conflitantes, PARE e pergunte ao dono qual estado único é autoritativo antes de escrever ou rotear.
|
|
73
|
+
|
|
74
|
+
Nota de vocabulário: o upstream usa `ready-for-agent` / `ready-for-human`. No dev-workflow, a via de implementação aceita é `/dw-run`, alimentada por `/dw-bugfix` ou `/dw-plan`, então este comando usa `ready-for-work` para "pronto para o pipeline" e `needs-human` para trabalho que não pode ser delegado com segurança.
|
|
75
|
+
|
|
76
|
+
## Integração com GitHub
|
|
77
|
+
|
|
78
|
+
`gh` é permitido porque este repo já o usa em `/dw-generate-pr`, mas nunca é obrigatório.
|
|
79
|
+
|
|
80
|
+
1. Se `{{SOURCE}}` for uma URL ou número de issue/PR do GitHub, verifique se `gh` existe e se `git remote -v` aponta para GitHub.
|
|
81
|
+
2. Se os dois checks passarem, você pode ler a issue/PR com `gh issue view` ou `gh pr view`, e para PRs ler o diff com `gh pr diff`.
|
|
82
|
+
3. Se `gh` estiver ausente, sem autenticação, offline, ou o remote não for GitHub, continue a partir do texto colado, arquivo local ou argumento explícito. Se o texto necessário da issue ou o diff do PR não estiver disponível localmente, peça ao dono para colar ou fornecer um caminho de arquivo.
|
|
83
|
+
4. Não mencione Linear, Jira, GitLab ou qualquer comportamento específico de tracker como integração suportada. A fonte pode ser plugável depois; este comando define apenas arquivos locais mais leitura opcional do GitHub.
|
|
84
|
+
5. Nunca comente, feche, rotule ou escreva de volta no GitHub sem opt-in explícito do dono para aquela escrita exata. A persistência em `.dw/triage/**` é a saída padrão e suficiente.
|
|
85
|
+
|
|
86
|
+
## Fluxo de Trabalho
|
|
87
|
+
|
|
88
|
+
### 1. Ler o Pedido Completo
|
|
89
|
+
|
|
90
|
+
- Leia o texto colado ou arquivo local por inteiro.
|
|
91
|
+
- Se a fonte for uma issue e `gh` estiver disponível, leia título, corpo, comentários, labels, autor e URL.
|
|
92
|
+
- Se a fonte for um PR e `gh` estiver disponível, leia título, corpo, comentários, arquivos alterados e diff.
|
|
93
|
+
- Preserve a origem no registro de triagem: `source_type`, `source_ref`, `author`, `reported_at` e método de recuperação.
|
|
94
|
+
|
|
95
|
+
### 2. Checar Redundância Antes de Recomendar
|
|
96
|
+
|
|
97
|
+
Procure por conceito de domínio, não por redação:
|
|
98
|
+
|
|
99
|
+
- `.dw/domain/**` quando existir
|
|
100
|
+
- `.dw/spec/**`
|
|
101
|
+
- `.dw/bugfixes/**`
|
|
102
|
+
- `.dw/rules/**`
|
|
103
|
+
- caminhos de código provavelmente donos do conceito
|
|
104
|
+
- docs e testes que nomeiam o comportamento
|
|
105
|
+
|
|
106
|
+
Se comportamento equivalente já existir, recomende `wontfix` com motivo `already implemented`, reporte exatamente onde procurou e onde a implementação vive, escreva o registro de triagem, e NÃO escreva `.dw/out-of-scope/**`.
|
|
107
|
+
|
|
108
|
+
### 3. Checar Rejeições Anteriores
|
|
109
|
+
|
|
110
|
+
Leia `.dw/out-of-scope/**` quando existir. Traga qualquer conceito de domínio parecido antes de recomendar um estado:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
## Prior Rejection Found
|
|
114
|
+
|
|
115
|
+
- Concept: `<concept>`
|
|
116
|
+
- Record: `.dw/out-of-scope/<concept>.md`
|
|
117
|
+
- Why it matters: <comparação em uma linha>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Se a rejeição anterior claramente se aplicar, recomende `wontfix` a menos que o dono reabra explicitamente a decisão.
|
|
121
|
+
|
|
122
|
+
### 4. Recomendar Categoria e Estado, Depois Esperar
|
|
123
|
+
|
|
124
|
+
Apresente:
|
|
125
|
+
|
|
126
|
+
- resumo conciso do pedido
|
|
127
|
+
- resumo da busca no codebase, incluindo onde a redundância foi checada
|
|
128
|
+
- resumo de rejeição anterior
|
|
129
|
+
- categoria recomendada: `bug` ou `enhancement`
|
|
130
|
+
- estado recomendado: `needs-info`, `ready-for-work`, `needs-human` ou `wontfix`
|
|
131
|
+
- raciocínio e próximo roteamento
|
|
132
|
+
|
|
133
|
+
Então peça ao dono para aprovar ou corrigir categoria/estado. Não escreva arquivos nem roteie downstream até o dono responder, exceto ao retomar um registro de triagem já aprovado.
|
|
134
|
+
|
|
135
|
+
### 5. Verificar Antes do Brief
|
|
136
|
+
|
|
137
|
+
Depois da aprovação do dono e antes de qualquer brief downstream:
|
|
138
|
+
|
|
139
|
+
**Para bugs:**
|
|
140
|
+
- Reproduza a partir dos passos do autor quando possível.
|
|
141
|
+
- Registre o comando exato, ambiente, fixture ou caminho manual usado.
|
|
142
|
+
- Reporte um resultado: `confirmed`, `failed-to-reproduce` ou `insufficient-detail`.
|
|
143
|
+
- Trate `insufficient-detail` como sinal forte de `needs-info`.
|
|
144
|
+
|
|
145
|
+
**Para PRs:**
|
|
146
|
+
- Confirme que o diff faz o que o PR afirma.
|
|
147
|
+
- Rode testes ou checks relevantes para a área tocada.
|
|
148
|
+
- Registre os arquivos alterados inspecionados e comandos rodados.
|
|
149
|
+
- Se a alegação e o diff divergirem, pare e recomende `needs-human` ou `needs-info`.
|
|
150
|
+
|
|
151
|
+
**Para enhancements:**
|
|
152
|
+
- Verifique que a capacidade ainda não existe e que o pedido tem forma de produto suficiente para intake de PRD.
|
|
153
|
+
- Se o vocabulário de produto ou o resultado desejado estiver instável, roteie para `/dw-brainstorm --mode=grill` em vez de inventar uma entrevista aqui.
|
|
154
|
+
|
|
155
|
+
### 6. Aplicar o Desfecho
|
|
156
|
+
|
|
157
|
+
Use `.dw/templates/triage-record-template.md` para todo item de triagem escrito. Registre entradas de histórico como `YYYY-MM-DD — <from> -> <to> — <actor> — <reason>`.
|
|
158
|
+
|
|
159
|
+
Desfechos:
|
|
160
|
+
|
|
161
|
+
- `ready-for-work` + `bug` -> escreva `.dw/triage/NNN-<slug>.md`, depois roteie para `/dw-bugfix` com o resumo de reprodução verificada e o caminho do registro de triagem
|
|
162
|
+
- `ready-for-work` + `enhancement` -> escreva `.dw/triage/NNN-<slug>.md`, depois roteie para `/dw-plan prd` com o resumo de produto verificado e o caminho do registro de triagem
|
|
163
|
+
- `needs-human` -> escreva `.dw/triage/NNN-<slug>.md` e registre por que delegar é inseguro: decisão de design, acesso externo, julgamento, teste manual ou ownership indefinido
|
|
164
|
+
- `needs-info` -> escreva `.dw/triage/NNN-<slug>.md` e inclua a seção de `.dw/templates/triage-needs-info-template.md` com perguntas em aberto
|
|
165
|
+
- `wontfix` rejeitado -> escreva `.dw/triage/NNN-<slug>.md`, depois escreva ou atualize `.dw/out-of-scope/<concept>.md` com motivo, evidência e condição de reabertura
|
|
166
|
+
- `wontfix` already implemented -> escreva `.dw/triage/NNN-<slug>.md`, aponte para a implementação, e NÃO escreva `.dw/out-of-scope/**`
|
|
167
|
+
|
|
168
|
+
### 7. Grill Para Pedidos Malformados
|
|
169
|
+
|
|
170
|
+
Se o pedido não tiver problema, ator, conceito de domínio, resultado desejado ou fronteira de aceite estáveis, não reimplemente uma entrevista dentro de `/dw-triage`.
|
|
171
|
+
|
|
172
|
+
Recomende:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Este item de intake não está pronto para categorização. Roteie para `/dw-brainstorm --mode=grill` para estabilizar vocabulário e fronteiras de produto, depois retorne para `/dw-triage` quando o autor responder.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Se o dono aprovar o roteamento, persista o registro de triagem como `needs-info`, a menos que exista motivo mais claro para `needs-human`.
|
|
179
|
+
|
|
180
|
+
## Formato Preferido de Resposta
|
|
181
|
+
|
|
182
|
+
### Resumo de Intake
|
|
183
|
+
- Fonte:
|
|
184
|
+
- Pedido:
|
|
185
|
+
- Autor:
|
|
186
|
+
- Recuperação:
|
|
187
|
+
|
|
188
|
+
### Checks do Codebase
|
|
189
|
+
- Busca de redundância:
|
|
190
|
+
- Busca de rejeição anterior:
|
|
191
|
+
- Evidência:
|
|
192
|
+
|
|
193
|
+
### Recomendação
|
|
194
|
+
- Categoria: `bug` | `enhancement`
|
|
195
|
+
- Estado: `needs-info` | `ready-for-work` | `needs-human` | `wontfix`
|
|
196
|
+
- Motivo:
|
|
197
|
+
- Roteamento proposto:
|
|
198
|
+
|
|
199
|
+
### Checkpoint do Dono
|
|
200
|
+
- Peça ao dono para aprovar ou corrigir categoria/estado antes de escrever e rotear.
|
|
201
|
+
|
|
202
|
+
### Resultado da Verificação
|
|
203
|
+
- Status: `confirmed` | `failed-to-reproduce` | `insufficient-detail`
|
|
204
|
+
- Comandos/arquivos inspecionados:
|
|
205
|
+
- O que isso prova:
|
|
206
|
+
|
|
207
|
+
### Desfecho Persistido
|
|
208
|
+
- Registro de triagem:
|
|
209
|
+
- Registro out-of-scope, se houver:
|
|
210
|
+
- Próximo comando:
|
|
211
|
+
|
|
212
|
+
## Anti-patterns
|
|
213
|
+
|
|
214
|
+
- Tratar labels ou comentários do GitHub como fonte da verdade
|
|
215
|
+
- Criar `.dw/out-of-scope/**` para um pedido já implementado
|
|
216
|
+
- Comparar redundância apenas pela redação do pedido
|
|
217
|
+
- Rotear para `/dw-bugfix` ou `/dw-plan prd` antes da aprovação do dono
|
|
218
|
+
- Escrever bugfix ou PRD brief a partir de alegação não verificada
|
|
219
|
+
- Prometer integrações com trackers que este comando não consegue ler ou escrever
|
|
220
|
+
</system_instructions>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<system_instructions>
|
|
2
|
+
Você é o guardião do ciclo de vida das worktrees. Worktrees de delegação (uma por task `dw-*-run`, criadas como `../<projeto>-<slug>` ao lado do checkout principal) são baratas de criar e caras de esquecer: cada uma carrega seu próprio `node_modules`, saída de build e caches, e uma worktree mergeada que ninguém removeu é puro desperdício de disco (35 worktrees esquecidas = 40 GB num projeto real). Este comando é dono do ciclo inteiro — criar **preparada**, listar com **veredito**, remover só o que está **provadamente seguro**, mergear na **ordem segura** — por meio do script determinístico `.dw/scripts/lib/worktree-gc.mjs`. Ele nunca usa `--force`.
|
|
3
|
+
|
|
4
|
+
## Quando Usar
|
|
5
|
+
- "Cria uma worktree pra X", "sobe uma worktree", e antes de qualquer dispatch WRITE de `/dw-codex-run`, `/dw-claude-run` ou `/dw-copilot-run` (o pre-flight deles chama `create` quando a worktree ainda não existe).
|
|
6
|
+
- "Limpa as worktrees", "quantas worktrees sobraram", "libera disco", logo após um merge, dentro do `/dw-pause`, e a partir do `/dw-harness-audit`.
|
|
7
|
+
- "Mergeia a worktree X" — a decisão explícita de merge do dono **depois** do gate.
|
|
8
|
+
- NÃO use pra mergear trabalho não revisado: o gate (`/dw-review` + `/dw-qa` + `/dw-secure-audit`) vem antes; `merge` só executa a ordem mecânica segura.
|
|
9
|
+
|
|
10
|
+
## Posição no Pipeline
|
|
11
|
+
**Predecessor:** `/dw-plan` (spec + prompt prontos) ou qualquer task a delegar | **Sucessor:** `/dw-codex-run` / `/dw-claude-run` / `/dw-copilot-run` (após `create`); `/dw-commit` + `/dw-generate-pr` (após `merge`)
|
|
12
|
+
|
|
13
|
+
## Modos
|
|
14
|
+
|
|
15
|
+
| Invocação | Comportamento |
|
|
16
|
+
|-----------|---------------|
|
|
17
|
+
| `/dw-worktree list [--base <branch>] [--json] [--strict]` | Tabela de toda worktree secundária: branch, tamanho aparente, idade, arquivos sujos, **veredito**, motivo. `--strict` sai com 3 quando existe qualquer entrada REMOVABLE/PRUNABLE (gancho de auditoria). |
|
|
18
|
+
| `/dw-worktree create <slug> [--branch <name>] [--base <branch>] [--no-prep]` | Cria `../<projeto>-<slug>` em `feat/<slug>` (ou `--branch`) a partir da branch base, depois roda os comandos de **prep** pra que um delegado nunca trabalhe cego (detectado pelo lockfile: `pnpm install --frozen-lockfile --prefer-offline` + `pnpm build:packages` quando esse script existe; `npm ci`; `yarn install --frozen-lockfile`; `bun install`; `uv sync`). Falha no prep = exit 2: a worktree existe mas **não despache** até corrigir. Imprime `WORKTREE=<path>`. |
|
|
19
|
+
| `/dw-worktree clean [--apply] [--older-than <dias>] [--keep-branches]` | **Dry-run por default.** Com `--apply`: remove toda worktree REMOVABLE, apaga a branch dela (merge verificado) e faz prune das registrações mortas. Entradas KEEP nunca são tocadas. |
|
|
20
|
+
| `/dw-worktree merge <slug\|path> [--base <branch>] [--keep-branches]` | A ordem segura, a partir do checkout principal: principal está na branch base e limpo → worktree limpa e sem processo dentro → `git merge --ff-only` → `git worktree remove` → apaga a branch → `git worktree prune`. Qualquer checagem que falhe aborta **antes** do merge com a correção exata; merge não-ff é recusado (rebase dentro da worktree, roda o gate de novo, mergeia de novo). |
|
|
21
|
+
| `/dw-worktree prune` | Descarta registrações cujo diretório já sumiu. |
|
|
22
|
+
|
|
23
|
+
## Vereditos — o script decide; você reporta, não sobrescreve
|
|
24
|
+
|
|
25
|
+
| Veredito | Significado | Ação |
|
|
26
|
+
|----------|-------------|------|
|
|
27
|
+
| `REMOVABLE` | Head é ancestral de uma branch de integração, árvore limpa, nenhum processo com cwd dentro, não travada | `clean --apply` remove |
|
|
28
|
+
| `KEEP:unmerged` | N commits fora de qualquer branch de integração | Dono decide: mergear (`merge`), manter ou descartar explicitamente |
|
|
29
|
+
| `KEEP:dirty` | Arquivos não commitados ou não rastreados | Commit/stash dentro da worktree, ou o dono descarta explicitamente |
|
|
30
|
+
| `KEEP:in-use` | Um processo (dev server, execução de CLI, shell) tem o cwd dentro | Pare-o primeiro (`TaskStop`, ou o PID listado) |
|
|
31
|
+
| `KEEP:locked` | `git worktree lock` | Dono destrava |
|
|
32
|
+
| `KEEP:recent` | Só com `--older-than N`: mergeada mas último commit mais novo que N dias | GC por idade apenas |
|
|
33
|
+
| `PRUNABLE` | Diretório já sumiu | `prune` |
|
|
34
|
+
|
|
35
|
+
## Regras Duras
|
|
36
|
+
|
|
37
|
+
<critical>Crie via `create`, nunca um `git worktree add` pelado. A convenção (`../<projeto>-<slug>`, branch a partir da base) é o que permite ao `list` e ao `clean` raciocinar sobre a árvore, e o passo de prep é o que impede o agente delegado de trabalhar cego (`tsc: Cannot find module`, `jest: not found`).</critical>
|
|
38
|
+
|
|
39
|
+
<critical>O fim de vida é no MESMO TURNO do merge. O turno que mergeia a branch de uma worktree também a remove: `merge` faz os dois numa chamada; se o merge aconteceu por outro meio (PR mergeado no forge, merge manual), rode `clean --apply` nesse mesmo turno. Um turno que termina com `list` ainda mostrando entradas REMOVABLE é trabalho inacabado — não um "depois".</critical>
|
|
40
|
+
|
|
41
|
+
<critical>Nunca `--force`. `git worktree remove --force` e `git branch -D` à mão são bloqueados pelo hook git-guardrails. Uma worktree suja, não mergeada, em uso ou travada é um veredito KEEP: reporte com o motivo e deixe-a. O único caminho pra remover uma worktree KEEP é a instrução explícita do dono nomeando-a — e mesmo assim, prefira commitar/mergear a forçar.</critical>
|
|
42
|
+
|
|
43
|
+
<critical>Nunca mude o estado ativo do dono. `merge` aborta se o checkout principal não está na branch base ou tem mudanças não commitadas; nunca roda `checkout`, `stash` ou `reset` na árvore do dono.</critical>
|
|
44
|
+
|
|
45
|
+
## Resolução da branch base
|
|
46
|
+
|
|
47
|
+
`--base` → `DW_WORKTREE_BASE` → `.dw/config.json` `worktree.base` → `origin/HEAD` → `develop` → `main` → `master` (a primeira que existe localmente vence; as outras que existem ainda são consultadas pro "merged into"). Um projeto que integra em `develop` enquanto `origin/HEAD` aponta pra `main` deve definir:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{ "worktree": { "base": "develop", "prep": ["pnpm install --frozen-lockfile --prefer-offline", "pnpm build:packages"] } }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`worktree.prep` substitui a detecção por lockfile por completo (array vazio = sem prep).
|
|
54
|
+
|
|
55
|
+
## Workflow
|
|
56
|
+
|
|
57
|
+
1. Rode o script de qualquer lugar dentro do repo (ele resolve o checkout principal): `node .dw/scripts/lib/worktree-gc.mjs <modo> …`. Se o script não existir, a instalação está velha → `dev-workflow update`, depois continue.
|
|
58
|
+
2. Mostre a saída do script **literalmente** — a tabela é o report, não parafraseie vereditos.
|
|
59
|
+
3. `clean` sem `--apply` quando o usuário pediu pra *checar*; com `--apply` quando pediu pra *limpar* ou quando você está fechando um turno de merge.
|
|
60
|
+
4. Após `clean --apply` / `merge`: diga quantas foram removidas, tamanho aparente liberado, cada entrada KEEP com o motivo, e a linha de disco livre.
|
|
61
|
+
5. Se o usuário pediu pra limpar *tudo* e sobraram entradas KEEP: uma pergunta listando-as (nome · veredito · motivo · tamanho) com a opção segura primeiro (merge / commit) e "descartar" por último. Caso contrário, só reporte.
|
|
62
|
+
|
|
63
|
+
## Integrações (quem chama isto)
|
|
64
|
+
|
|
65
|
+
- **Pre-flight do `dw-cli-run`** — worktree alvo ausente → `create <slug>`; **Disciplina** — branch mergeada → `/dw-worktree merge <slug>` ou `/dw-worktree clean --apply` no mesmo turno.
|
|
66
|
+
- **`/dw-pause`** — roda `list`; toda entrada REMOVABLE é um open loop pra fechar *agora* com `clean --apply`, não pra registrar.
|
|
67
|
+
- **`/dw-harness-audit`** — `list --strict`; exit 3 limita a categoria *Worktree hygiene* e cada sobra é citada.
|
|
68
|
+
- **Hook git-guardrails** — bloqueia `git worktree remove --force`, `git branch -D`, `git clean -f`.
|
|
69
|
+
|
|
70
|
+
## Formato de saída
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
🌳 Worktrees — /home/me/code/app (base: develop)
|
|
74
|
+
<tabela do script literal>
|
|
75
|
+
33 REMOVABLE (~75.9G apparent) · 2 KEEP · 0 PRUNABLE
|
|
76
|
+
Próximo: /dw-worktree clean --apply (dry-run acima)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Após `--apply`:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
🌳 Limpo — removidas 33 worktree(s), ~75.9G aparente · mantidas 2: app-build (KEEP:dirty: 1 arquivo não commitado), w20 (KEEP:unmerged: 1 commit à frente de develop)
|
|
83
|
+
41.2G free on the filesystem of /home/me/code
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Anti-patterns
|
|
87
|
+
- `git worktree add` à mão → worktree sem prep, delegado cego, nome fora da convenção.
|
|
88
|
+
- Mergear e "limpar depois" → o depois nunca chega; 40 GB disso.
|
|
89
|
+
- `git worktree remove --force` / `branch -D` pra fazer um veredito KEEP sumir.
|
|
90
|
+
- Parafrasear vereditos ou esconder motivos de KEEP.
|
|
91
|
+
- Rodar `merge` antes do gate.
|
|
92
|
+
- Fazer checkout da branch base na árvore principal do dono pra o `merge` passar.
|
|
93
|
+
|
|
94
|
+
## Structured Return
|
|
95
|
+
- **Status:** `PASS` (modo concluído; após `clean --apply`/`merge` zero REMOVABLE restantes) · `FINDINGS` (entradas REMOVABLE mostradas em dry-run, ou entradas KEEP precisam do dono) · `BLOCKED` (script ausente, merge recusado, prep falhou).
|
|
96
|
+
- **Evidence:** a saída do script (tabela, linhas de removido, linha de disco livre).
|
|
97
|
+
- **Artifacts:** `WORKTREE=<path>` pro `create`; paths removidos + branches apagadas pro `clean`/`merge`.
|
|
98
|
+
- **Next Step:** o próximo comando exato (`/dw-codex-run` na worktree criada; `clean --apply`; a decisão do dono sobre entradas KEEP).
|
|
99
|
+
|
|
100
|
+
</system_instructions>
|