@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.
Files changed (84) hide show
  1. package/.claude-plugin/marketplace.json +1 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +176 -0
  4. package/README.md +10 -5
  5. package/lib/build-plugin.js +4 -1
  6. package/lib/constants.js +8 -2
  7. package/lib/init.js +26 -0
  8. package/lib/validate.js +21 -0
  9. package/package.json +1 -1
  10. package/scaffold/en/agent-instructions.md +2 -0
  11. package/scaffold/en/commands/dw-autopilot.md +2 -0
  12. package/scaffold/en/commands/dw-brainstorm.md +12 -8
  13. package/scaffold/en/commands/dw-bugfix.md +4 -2
  14. package/scaffold/en/commands/dw-claude-run.md +1 -1
  15. package/scaffold/en/commands/dw-codex-run.md +1 -1
  16. package/scaffold/en/commands/dw-copilot-run.md +1 -1
  17. package/scaffold/en/commands/dw-harness-audit.md +2 -0
  18. package/scaffold/en/commands/dw-help.md +6 -2
  19. package/scaffold/en/commands/dw-pause.md +1 -0
  20. package/scaffold/en/commands/dw-plan.md +2 -2
  21. package/scaffold/en/commands/dw-refactor.md +1 -0
  22. package/scaffold/en/commands/dw-report.md +169 -0
  23. package/scaffold/en/commands/dw-review.md +33 -2
  24. package/scaffold/en/commands/dw-run.md +3 -1
  25. package/scaffold/en/commands/dw-triage.md +220 -0
  26. package/scaffold/en/commands/dw-worktree.md +100 -0
  27. package/scaffold/en/templates/idea-onepager.md +28 -0
  28. package/scaffold/en/templates/task-template.md +1 -0
  29. package/scaffold/en/templates/tasks-template.md +9 -8
  30. package/scaffold/en/templates/triage-needs-info-template.md +23 -0
  31. package/scaffold/en/templates/triage-out-of-scope-template.md +36 -0
  32. package/scaffold/en/templates/triage-record-template.md +88 -0
  33. package/scaffold/pt-br/agent-instructions.md +2 -0
  34. package/scaffold/pt-br/commands/dw-autopilot.md +83 -81
  35. package/scaffold/pt-br/commands/dw-brainstorm.md +12 -9
  36. package/scaffold/pt-br/commands/dw-bugfix.md +4 -2
  37. package/scaffold/pt-br/commands/dw-claude-run.md +20 -20
  38. package/scaffold/pt-br/commands/dw-codex-run.md +20 -20
  39. package/scaffold/pt-br/commands/dw-context-budget.md +10 -10
  40. package/scaffold/pt-br/commands/dw-copilot-run.md +21 -21
  41. package/scaffold/pt-br/commands/dw-dockerize.md +102 -102
  42. package/scaffold/pt-br/commands/dw-find-skills.md +52 -52
  43. package/scaffold/pt-br/commands/dw-goal.md +41 -41
  44. package/scaffold/pt-br/commands/dw-harness-audit.md +13 -11
  45. package/scaffold/pt-br/commands/dw-help.md +6 -2
  46. package/scaffold/pt-br/commands/dw-intel.md +70 -70
  47. package/scaffold/pt-br/commands/dw-learn.md +24 -24
  48. package/scaffold/pt-br/commands/dw-new-project.md +88 -88
  49. package/scaffold/pt-br/commands/dw-open-design.md +53 -53
  50. package/scaffold/pt-br/commands/dw-opportunities.md +45 -45
  51. package/scaffold/pt-br/commands/dw-pause.md +40 -39
  52. package/scaffold/pt-br/commands/dw-plan.md +2 -2
  53. package/scaffold/pt-br/commands/dw-refactor.md +31 -30
  54. package/scaffold/pt-br/commands/dw-report.md +169 -0
  55. package/scaffold/pt-br/commands/dw-resume.md +22 -22
  56. package/scaffold/pt-br/commands/dw-review.md +33 -2
  57. package/scaffold/pt-br/commands/dw-run.md +3 -1
  58. package/scaffold/pt-br/commands/dw-skill-health.md +10 -10
  59. package/scaffold/pt-br/commands/dw-subtask-complete.md +4 -4
  60. package/scaffold/pt-br/commands/dw-subtask-start.md +4 -4
  61. package/scaffold/pt-br/commands/dw-triage.md +220 -0
  62. package/scaffold/pt-br/commands/dw-worktree.md +100 -0
  63. package/scaffold/pt-br/templates/bugfix-summary-template.md +20 -20
  64. package/scaffold/pt-br/templates/concerns-template.md +20 -20
  65. package/scaffold/pt-br/templates/idea-onepager.md +28 -0
  66. package/scaffold/pt-br/templates/project-onepager.md +32 -32
  67. package/scaffold/pt-br/templates/state-template.md +13 -13
  68. package/scaffold/pt-br/templates/task-template.md +1 -0
  69. package/scaffold/pt-br/templates/tasks-template.md +9 -8
  70. package/scaffold/pt-br/templates/triage-needs-info-template.md +23 -0
  71. package/scaffold/pt-br/templates/triage-out-of-scope-template.md +36 -0
  72. package/scaffold/pt-br/templates/triage-record-template.md +88 -0
  73. package/scaffold/scripts/hooks/git-guardrails.mjs +42 -24
  74. package/scaffold/scripts/lib/worktree-gc.mjs +460 -0
  75. package/scaffold/skill-registry.json +1 -1
  76. package/scaffold/skills/dw-cli-run/SKILL.md +10 -1
  77. package/scaffold/skills/dw-debug-protocol/SKILL.md +2 -0
  78. package/scaffold/skills/dw-debug-protocol/references/six-step-triage.md +60 -1
  79. package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +14 -14
  80. package/scaffold/skills/dw-grilling/SKILL.md +17 -7
  81. package/scaffold/skills/dw-grilling/references/decision-tree.md +30 -7
  82. package/scaffold/skills/dw-simplification/references/deep-modules.md +50 -0
  83. package/scaffold/skills/dw-testing-discipline/SKILL.md +3 -1
  84. package/scaffold/skills/dw-testing-discipline/references/tdd-loop.md +83 -0
@@ -1,12 +1,12 @@
1
1
  <system_instructions>
2
- Voce e um agent de retomada de sessao. Seu trabalho e ler `.dw/STATE.md`, se orientar e orientar o usuario, e rotear para o proximo passo mais util. Este comando e o inverso do `/dw-pause`.
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 usuario disser "retomar trabalho", "continuar", "onde paramos?", "voltar de onde parei", ou comecar uma sessao nova em um projeto existente
6
- - Use proativamente no inicio de qualquer sessao que abrir um projeto com `.dw/STATE.md` nao-vazio e o usuario ainda nao tiver expressado uma intencao
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
- ## Posicao na Pipeline
9
- **Predecessor:** `/dw-pause` (sessao anterior) | **Sucessor:** depende do que esta aberto (tipicamente `/dw-run --resume`, `/dw-bugfix`, `/dw-plan`, `/dw-qa` ou `/dw-review`)
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` nao existir, reporte: "Nenhum estado pausado encontrado — parece sessao nova. Rode `/dw-help` para proximos passos." Pare aqui.
19
- - Se `STATE.md` existir mas toda secao for `_nenhum_`, reporte: "STATE.md vazio — nada a retomar. Me diga o que voce quer fazer."
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, nao verifique — apenas mostre.
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, **nao o STATE.md cru**:
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 proximo passo
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 estagio `tasks/` | `/dw-run --resume` |
60
- | Open Loop num PRD em estagio `techspec` | `/dw-plan techspec` |
61
- | Open Loop num PRD em estagio `prd` | `/dw-plan tasks` (se PRD aprovado) ou continuar PRD |
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 usuario resolva o bloqueio primeiro |
64
- | So Todos e Decisoes, sem trabalho ativo | Perguntar o que comecar |
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 sugestao como pergunta, nao como ordem:
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). Nao modificar conteudo das secoes — agora a sessao esta de volta e isso e do usuario.
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 Obrigatorio
78
+ ## Comportamento Obrigatório
79
79
 
80
- <critical>NUNCA auto-execute o comando sugerido. `/dw-resume` so propoe; o usuario confirma antes de qualquer `/dw-run`, `/dw-plan` ou `/dw-bugfix`.</critical>
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 voce nao rodou `ls`, nao reporte que o arquivo existe ou nao.</critical>
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 compactacao e necessaria — sugira `/dw-pause` para compactar da proxima vez.</critical>
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). Adaptacoes: heuristicas de routing mapeiam conteudo do STATE.md para comandos `dw-*` especificos; cross-reference com `.dw/spec/` e `.dw/bugfixes/` para detectar staleness; nunca auto-executa.
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
- | `{{MODE}}` | `--coverage-only` / `--code-only` / `--bugfix <slug>` (opcional; default = ambos, target = PRD) | — |
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
- Voce e o auditor de saude de skills e agentes do dev-workflow.
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 catalogos externos.
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` esta explicito: `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 especifico.
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 execucao.
21
- - `domain-pack`: expertise de dominio usada so quando a tarefa entra naquele dominio.
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`: midia/exemplos/assets carregados so para tasks correspondentes.
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 sao carregados sob demanda.
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
- ## Saida
28
- Retorne um relatorio conciso com uma secao de retorno estruturado. Nao delete arquivos.
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
- Voce registra um handoff estruturado de subagente.
2
+ Você registra um handoff estruturado de subagente.
3
3
 
4
4
  ## Quando Usar
5
- - Use dentro da sessao child/subagente quando a subtarefa atribuida estiver completa, bloqueada ou fora de budget.
5
+ - Use dentro da sessão child/subagente quando a subtarefa atribuída estiver completa, bloqueada ou fora de budget.
6
6
 
7
- ## Formato Obrigatorio
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 evidencia resumida. Nao inclua logs completos nem dumps de transcript.
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
- Voce cria input packets minimos para subagentes.
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, evidencia de teste, QA em browser, review de seguranca.
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 especifico 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 criterio de parada.
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>