@thiagodiogo/pscode 1.0.0 → 2.0.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 (87) hide show
  1. package/README.md +2 -2
  2. package/bin/pscode.js +0 -0
  3. package/dist/cli/index.js +6 -7
  4. package/dist/commands/config.d.ts +4 -12
  5. package/dist/commands/config.js +69 -242
  6. package/dist/core/change-metadata/schema.d.ts +1 -0
  7. package/dist/core/change-metadata/schema.js +1 -0
  8. package/dist/core/{archive.d.ts → complete.d.ts} +2 -3
  9. package/dist/core/{archive.js → complete.js} +63 -64
  10. package/dist/core/completions/command-registry.js +5 -9
  11. package/dist/core/config-schema.d.ts +1 -5
  12. package/dist/core/config-schema.js +2 -5
  13. package/dist/core/global-config.d.ts +1 -3
  14. package/dist/core/global-config.js +1 -1
  15. package/dist/core/init.d.ts +2 -0
  16. package/dist/core/init.js +81 -21
  17. package/dist/core/jira-transition.d.ts +16 -0
  18. package/dist/core/jira-transition.js +29 -0
  19. package/dist/core/migration.d.ts +3 -12
  20. package/dist/core/migration.js +10 -72
  21. package/dist/core/presets/dixi.d.ts +32 -0
  22. package/dist/core/presets/dixi.js +405 -0
  23. package/dist/core/profile-sync-drift.js +9 -2
  24. package/dist/core/profiles.d.ts +23 -21
  25. package/dist/core/profiles.js +28 -25
  26. package/dist/core/shared/skill-generation.js +3 -5
  27. package/dist/core/shared/tool-detection.d.ts +2 -2
  28. package/dist/core/shared/tool-detection.js +1 -3
  29. package/dist/core/templates/skill-templates.d.ts +1 -2
  30. package/dist/core/templates/skill-templates.js +1 -2
  31. package/dist/core/templates/workflows/apply-change.js +3 -3
  32. package/dist/core/templates/workflows/archive-change.d.ts +2 -2
  33. package/dist/core/templates/workflows/archive-change.js +10 -10
  34. package/dist/core/templates/workflows/onboard.js +9 -9
  35. package/dist/core/update.d.ts +1 -6
  36. package/dist/core/update.js +5 -29
  37. package/dist/core/workspace/foundation.d.ts +1 -1
  38. package/dist/core/workspace/foundation.js +1 -1
  39. package/dist/core/workspace/legacy-state.js +1 -1
  40. package/dist/core/workspace/skills.d.ts +4 -3
  41. package/dist/core/workspace/skills.js +3 -3
  42. package/package.json +21 -22
  43. package/pscode/content/dixi/architectures/feature-sliced-react/eslint-architecture.mjs.template +44 -0
  44. package/pscode/content/dixi/architectures/feature-sliced-react/features/README.md.template +30 -0
  45. package/pscode/content/dixi/architectures/feature-sliced-react/skeleton.yaml +8 -0
  46. package/pscode/content/dixi/architectures/hexagonal-spring/ArchitectureTest.java.template +41 -0
  47. package/pscode/content/dixi/architectures/hexagonal-spring/skeleton.yaml +11 -0
  48. package/pscode/content/dixi/claude-runtime/CLAUDE.md.java.template +62 -0
  49. package/pscode/content/dixi/claude-runtime/CLAUDE.md.react.template +74 -0
  50. package/pscode/content/dixi/claude-runtime/commands/adr.md +75 -0
  51. package/pscode/content/dixi/claude-runtime/commands/arch-check.md +64 -0
  52. package/pscode/content/dixi/claude-runtime/commands/dod.md +66 -0
  53. package/pscode/content/dixi/claude-runtime/commands/jira-draft.md +80 -0
  54. package/pscode/content/dixi/claude-runtime/commands/jira-setup.md +105 -0
  55. package/pscode/content/dixi/claude-runtime/commands/jira-sync.md +69 -0
  56. package/pscode/content/dixi/claude-runtime/commands/rfc.md +73 -0
  57. package/pscode/content/dixi/claude-runtime/hooks/arch-guard.mjs +101 -0
  58. package/pscode/content/dixi/claude-runtime/hooks/jira-context.mjs +60 -0
  59. package/pscode/content/dixi/claude-runtime/skills/pstld-arch-guardian.md +101 -0
  60. package/pscode/content/dixi/claude-runtime/skills/pstld-commit-crafter.md +98 -0
  61. package/pscode/content/dixi/claude-runtime/skills/pstld-jira-context.md +64 -0
  62. package/pscode/content/dixi/context/java/architecture.md +143 -0
  63. package/pscode/content/dixi/context/java/naming.md +62 -0
  64. package/pscode/content/dixi/context/java/testing.md +162 -0
  65. package/pscode/content/dixi/context/react/architecture.md +119 -0
  66. package/pscode/content/dixi/context/react/naming.md +129 -0
  67. package/pscode/content/dixi/context/react/testing.md +141 -0
  68. package/pscode/content/dixi/context/shared/commits.md +47 -0
  69. package/pscode/content/dixi/context/shared/dev-flow.md +53 -0
  70. package/pscode/content/dixi/context/shared/dod.md +38 -0
  71. package/pscode/content/dixi/context/shared/pr-flow.md +53 -0
  72. package/pscode/content/dixi/kit/java/.editorconfig +25 -0
  73. package/pscode/content/dixi/kit/java/.github/workflows/ci-java.yml +68 -0
  74. package/pscode/content/dixi/kit/java/.husky/commit-msg +2 -0
  75. package/pscode/content/dixi/kit/react/.editorconfig +20 -0
  76. package/pscode/content/dixi/kit/react/.github/workflows/ci-react.yml +80 -0
  77. package/pscode/content/dixi/kit/react/.husky/commit-msg +2 -0
  78. package/pscode/content/dixi/kit/react/.husky/pre-commit +2 -0
  79. package/pscode/content/dixi/kit/react/lint-staged.config.mjs +4 -0
  80. package/pscode/content/dixi/kit/shared/.commitlintrc.yml +15 -0
  81. package/pscode/content/dixi/kit/shared/.github/pull_request_template.md +24 -0
  82. package/schemas/pstld-workflow/schema.yaml +67 -0
  83. package/schemas/pstld-workflow/templates/design.md +15 -0
  84. package/schemas/pstld-workflow/templates/rfc.md +26 -0
  85. package/schemas/pstld-workflow/templates/tasks.md +15 -0
  86. package/dist/core/templates/workflows/sync-specs.d.ts +0 -10
  87. package/dist/core/templates/workflows/sync-specs.js +0 -290
@@ -0,0 +1,8 @@
1
+ dirs:
2
+ - src/shared/components/ui
3
+ - src/shared/hooks
4
+ - src/shared/services
5
+ - src/shared/types
6
+ - src/shared/utils
7
+ - src/entities
8
+ - src/features
@@ -0,0 +1,41 @@
1
+ package {basePackage};
2
+
3
+ import com.tngtech.archunit.core.domain.JavaClasses;
4
+ import com.tngtech.archunit.core.importer.ClassFileImporter;
5
+ import com.tngtech.archunit.lang.ArchRule;
6
+ import org.junit.jupiter.api.Test;
7
+
8
+ import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
9
+
10
+ public class ArchitectureTest {
11
+
12
+ private static final JavaClasses classes =
13
+ new ClassFileImporter().importPackages("{basePackage}");
14
+
15
+ @Test
16
+ void dominio_nao_deve_depender_de_infra() {
17
+ ArchRule rule = noClasses()
18
+ .that().resideInAPackage("{basePackage}.domain..")
19
+ .should().dependOnClassesThat()
20
+ .resideInAPackage("{basePackage}.infrastructure..");
21
+ rule.check(classes);
22
+ }
23
+
24
+ @Test
25
+ void aplicacao_nao_deve_depender_de_infra() {
26
+ ArchRule rule = noClasses()
27
+ .that().resideInAPackage("{basePackage}.application..")
28
+ .should().dependOnClassesThat()
29
+ .resideInAPackage("{basePackage}.infrastructure..");
30
+ rule.check(classes);
31
+ }
32
+
33
+ @Test
34
+ void adapter_in_nao_deve_depender_de_adapter_out() {
35
+ ArchRule rule = noClasses()
36
+ .that().resideInAPackage("{basePackage}.infrastructure.adapter.in..")
37
+ .should().dependOnClassesThat()
38
+ .resideInAPackage("{basePackage}.infrastructure.adapter.out..");
39
+ rule.check(classes);
40
+ }
41
+ }
@@ -0,0 +1,11 @@
1
+ dirs:
2
+ - src/main/java/{basePackageDir}/domain/model
3
+ - src/main/java/{basePackageDir}/domain/port/in
4
+ - src/main/java/{basePackageDir}/domain/port/out
5
+ - src/main/java/{basePackageDir}/application/usecase
6
+ - src/main/java/{basePackageDir}/infrastructure/adapter/in/rest
7
+ - src/main/java/{basePackageDir}/infrastructure/adapter/out/persistence
8
+ - src/main/java/{basePackageDir}/infrastructure/config
9
+ - src/test/java/{basePackageDir}/domain
10
+ - src/test/java/{basePackageDir}/application
11
+ - src/test/java/{basePackageDir}/infrastructure
@@ -0,0 +1,62 @@
1
+ <!-- dixi-constitutional -->
2
+ # Regras Constitucionais — Java/Spring (Arquitetura Hexagonal)
3
+
4
+ > Regras invioláveis. Não negocie sem motivo documentado.
5
+ > Detalhes completos em `pastelsdd/context/`.
6
+
7
+ ## Arquitetura Hexagonal
8
+
9
+ ### Camadas (da mais interna para a mais externa)
10
+ - `domain/` — entidades, value objects, interfaces de repositório, regras de negócio puras
11
+ - `application/` — use cases, ports (interfaces de entrada e saída)
12
+ - `infrastructure/` — adapters (JPA, REST controllers, messaging, config)
13
+
14
+ ### Regra de Dependência (OBRIGATÓRIO)
15
+ ```
16
+ infrastructure → application → domain
17
+ ```
18
+ - `domain` não importa NADA de `application` ou `infrastructure`
19
+ - `application` não importa NADA de `infrastructure`
20
+ - Adapters (`infrastructure`) só acessam `application` via interfaces (ports)
21
+
22
+ ### Imports Proibidos
23
+ - `domain.*` nunca importa `application.*` ou `infrastructure.*`
24
+ - `application.*` nunca importa `infrastructure.*`
25
+ - Exceção: testes de integração em `infrastructure/` podem referenciar qualquer camada
26
+
27
+ ## Nomenclatura por Camada
28
+
29
+ | Camada | Sufixo/Convenção |
30
+ |--------|------------------|
31
+ | `domain/entity/` | `Order`, `Customer` (sem sufixo) |
32
+ | `domain/repository/` | `OrderRepository` (interface) |
33
+ | `domain/service/` | `PricingService` (interface/pura) |
34
+ | `application/usecase/` | `CreateOrderUseCase` |
35
+ | `application/port/in/` | `CreateOrderPort` |
36
+ | `application/port/out/` | `SaveOrderPort` |
37
+ | `infrastructure/adapter/in/` | `OrderController`, `OrderListener` |
38
+ | `infrastructure/adapter/out/` | `OrderJpaAdapter`, `OrderEmailAdapter` |
39
+
40
+ ## Commits
41
+
42
+ Formato obrigatório: `<type>(<scope>): <msg> [TICKET-123]`
43
+
44
+ - `type`: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`
45
+ - `scope`: módulo ou camada afetada (e.g., `order`, `domain`, `infra`)
46
+ - Ticket JIRA obrigatório. Se não houver ticket, usar `[NO-TICKET]`
47
+
48
+ Exemplos:
49
+ ```
50
+ feat(order): add CreateOrderUseCase [PROJ-42]
51
+ fix(infra): correct JPA mapping for OrderStatus [PROJ-55]
52
+ ```
53
+
54
+ ## Referências
55
+
56
+ Docs completos em `pastelsdd/context/`:
57
+ - `pastelsdd/context/java/architecture.md` — guia completo de arquitetura hexagonal
58
+ - `pastelsdd/context/java/naming.md` — convenções de nomenclatura por camada
59
+ - `pastelsdd/context/shared/commits.md` — convenção completa de commits
60
+ - `pastelsdd/context/shared/dev-flow.md` — fluxo de desenvolvimento e PR
61
+
62
+ > Se `pastelsdd/context/` não existe, rode `pscode init --profile dixi` para instalar.
@@ -0,0 +1,74 @@
1
+ <!-- dixi-constitutional -->
2
+ # Regras Constitucionais — React/Next.js + TypeScript (Feature-Sliced Design)
3
+
4
+ > Regras invioláveis. Não negocie sem motivo documentado.
5
+ > Detalhes completos em `pastelsdd/context/`.
6
+
7
+ ## Feature-Sliced Design
8
+
9
+ ### Camadas (da mais compartilhada para a mais específica)
10
+ ```
11
+ shared → entities → features → pages/app
12
+ ```
13
+ - `shared/` — UI primitivos, utilitários, tipos globais, configuração de API
14
+ - `entities/` — modelos de domínio (User, Order) sem lógica de feature
15
+ - `features/` — funcionalidades de produto isoladas (auth, cart, checkout)
16
+ - `pages/` ou `app/` — composição de features e rotas (Next.js)
17
+
18
+ ### Regra de Isolamento de Features (OBRIGATÓRIO)
19
+ - **Features NÃO importam umas das outras**
20
+ - Se dois features precisam de algo em comum → mover para `entities/` ou `shared/`
21
+ - `pages/app` orquestra features; não contém lógica de negócio
22
+
23
+ ### Imports Proibidos
24
+ - `features/auth` nunca importa `features/cart` (ou qualquer outro feature)
25
+ - `shared/` nunca importa `entities/` ou `features/`
26
+ - `entities/` nunca importa `features/`
27
+
28
+ ## Nomenclatura
29
+
30
+ | Tipo | Convenção |
31
+ |------|-----------|
32
+ | Componentes React | `PascalCase` — `UserCard`, `OrderList` |
33
+ | Hooks | `use` + `PascalCase` — `useUserSession`, `useCartItems` |
34
+ | Services / API | `camelCase` — `userService`, `orderApi` |
35
+ | Arquivos de componente | `PascalCase.tsx` — `UserCard.tsx` |
36
+ | Arquivos de hook | `camelCase.ts` — `useUserSession.ts` |
37
+ | Arquivos de tipo | `camelCase.types.ts` ou `types.ts` no módulo |
38
+ | Testes | `<nome>.test.tsx` no mesmo diretório |
39
+
40
+ ## Estrutura Interna de um Feature
41
+
42
+ ```
43
+ features/auth/
44
+ ui/ ← componentes do feature
45
+ model/ ← store, hooks, lógica de estado
46
+ api/ ← chamadas de API específicas do feature
47
+ lib/ ← helpers internos
48
+ index.ts ← API pública do feature (barrel export)
49
+ ```
50
+ Só o que está em `index.ts` pode ser importado de fora do feature.
51
+
52
+ ## Commits
53
+
54
+ Formato obrigatório: `<type>(<scope>): <msg> [TICKET-123]`
55
+
56
+ - `type`: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`
57
+ - `scope`: feature ou camada afetada (e.g., `auth`, `cart`, `shared`)
58
+ - Ticket JIRA obrigatório. Se não houver ticket, usar `[NO-TICKET]`
59
+
60
+ Exemplos:
61
+ ```
62
+ feat(auth): add OAuth2 login flow [PROJ-10]
63
+ fix(cart): correct item count on empty cart [PROJ-23]
64
+ ```
65
+
66
+ ## Referências
67
+
68
+ Docs completos em `pastelsdd/context/`:
69
+ - `pastelsdd/context/react/architecture.md` — guia completo de feature-sliced design
70
+ - `pastelsdd/context/react/naming.md` — convenções de nomenclatura
71
+ - `pastelsdd/context/shared/commits.md` — convenção completa de commits
72
+ - `pastelsdd/context/shared/dev-flow.md` — fluxo de desenvolvimento e PR
73
+
74
+ > Se `pastelsdd/context/` não existe, rode `pscode init --profile dixi` para instalar.
@@ -0,0 +1,75 @@
1
+ # /pstld:adr — Geração de Architecture Decision Record
2
+
3
+ Você é um arquiteto técnico criando um ADR (Architecture Decision Record) formal para documentar uma decisão arquitetural.
4
+
5
+ ## Passos
6
+
7
+ 1. **Colete a decisão**
8
+
9
+ Se o usuário descreveu a decisão como argumento, use-a. Caso contrário, pergunte:
10
+ - Qual decisão arquitetural precisa ser documentada?
11
+ - Por que essa decisão está sendo tomada agora?
12
+ - Quais alternativas foram ou poderiam ser consideradas?
13
+
14
+ 2. **Contextualize com o projeto** (opcional)
15
+
16
+ - Leia `.pscode-dixi.yaml` se existir para identificar stack e família do projeto.
17
+ - Isso ajuda a formatar o ADR com referências corretas à arquitetura do projeto.
18
+
19
+ 3. **Gere o ADR**
20
+
21
+ Crie o documento no seguinte formato:
22
+
23
+ ```markdown
24
+ # ADR-NNN: <título descritivo e conciso>
25
+
26
+ **Status:** Aceita | Proposta | Obsoleta | Substituída por ADR-XXX
27
+ **Data:** <data atual>
28
+ **Contexto:** <stack/módulo afetado, se aplicável>
29
+
30
+ ## Contexto
31
+
32
+ <Descreve a situação atual, o problema a resolver e as forças em jogo.
33
+ Inclui restrições técnicas, de negócio ou operacionais relevantes.>
34
+
35
+ ## Decisão
36
+
37
+ <Enuncia a decisão tomada de forma afirmativa e clara.
38
+ Ex: "Usaremos X para Y porque Z.">
39
+
40
+ ## Alternativas Consideradas
41
+
42
+ ### Opção A: <nome>
43
+ - **Prós:** ...
44
+ - **Contras:** ...
45
+
46
+ ### Opção B: <nome>
47
+ - **Prós:** ...
48
+ - **Contras:** ...
49
+
50
+ ## Consequências
51
+
52
+ ### Positivas
53
+ - ...
54
+
55
+ ### Negativas / Trade-offs
56
+ - ...
57
+
58
+ ### Neutras / Observações
59
+ - ...
60
+
61
+ ## Referências
62
+ - <links, docs, issues relacionadas>
63
+ ```
64
+
65
+ 4. **Numbering**
66
+
67
+ Pergunte ao usuário qual número usar para o ADR (ADR-001, ADR-002, etc.) ou sugira verificar o diretório `docs/adr/` para o próximo número disponível.
68
+
69
+ 5. **Salvar o arquivo**
70
+
71
+ Pergunte se o usuário quer salvar o ADR em:
72
+ - `docs/adr/ADR-NNN-<slug>.md` (padrão recomendado)
73
+ - Outro local preferido pelo time
74
+
75
+ Se o usuário confirmar, crie o arquivo no local indicado.
@@ -0,0 +1,64 @@
1
+ # /pstld:arch-check — Verificação de conformidade arquitetural
2
+
3
+ Você é um guardião de arquitetura verificando se o código atual respeita as regras definidas para o projeto.
4
+
5
+ ## Passos
6
+
7
+ 1. **Leia o contexto do projeto**
8
+
9
+ - Leia `.pscode-dixi.yaml` na raiz do projeto para determinar `stack` e `family`.
10
+ - Leia `pastelsdd/context/architecture.md` para carregar as regras arquiteturais vigentes.
11
+ - Se `pastelsdd/context/architecture.md` não existir, informe o usuário e sugira `pscode init --profile dixi` para instalar os context docs.
12
+
13
+ 2. **Determine o escopo da verificação**
14
+
15
+ Se o usuário especificou um escopo (arquivo, módulo, camada), foque nele.
16
+ Caso contrário, pergunte: verificação pontual (mudança atual) ou varredura ampla (módulo/serviço)?
17
+
18
+ 3. **Execute a verificação de acordo com a stack**
19
+
20
+ ### Java / Spring (Arquitetura Hexagonal)
21
+
22
+ Verifique as seguintes regras (conforme `pastelsdd/context/architecture.md`):
23
+
24
+ - **Regra de dependência:** `infrastructure → application → domain`. Imports proibidos:
25
+ - `domain.*` importando `application.*` ou `infrastructure.*`
26
+ - `application.*` importando `infrastructure.*`
27
+ - **Nomenclatura por camada:** entidades sem sufixo em `domain/entity/`, use cases em `application/usecase/`, ports em `application/port/in/` e `application/port/out/`, adapters em `infrastructure/adapter/`
28
+ - **Pureza do domínio:** `domain/` sem anotações de framework (Spring, JPA, etc.)
29
+ - **Acesso via interfaces:** adapters acessam `application` somente via ports
30
+
31
+ ### React / Next.js (Feature-Sliced Design)
32
+
33
+ Verifique as seguintes regras (conforme `pastelsdd/context/architecture.md`):
34
+
35
+ - **Isolamento de features:** imports cruzados entre features são proibidos (feature A não importa de feature B)
36
+ - **Camadas permitidas:** `app → pages → widgets → features → entities → shared`
37
+ - **Shared é agnóstico:** `shared/` não importa de nenhuma outra camada
38
+ - **Lógica em pages/app:** lógica de negócio inline em `pages/` ou `app/` é um warning
39
+
40
+ ### Stack não detectada
41
+
42
+ Execute verificações genéricas: acoplamento excessivo, imports circulares, violações de separação de responsabilidades visíveis no código.
43
+
44
+ 4. **Reporte os resultados**
45
+
46
+ ```markdown
47
+ ## Resultado da Verificação Arquitetural
48
+
49
+ **Stack:** <detectada>
50
+ **Escopo:** <arquivos/módulos analisados>
51
+
52
+ ### Violações Encontradas
53
+ | Arquivo | Linha | Regra Violada | Severidade |
54
+ |---------|-------|---------------|------------|
55
+ | ... | ... | ... | ERRO/WARN |
56
+
57
+ ### Conformidades Verificadas ✅
58
+ - <regra OK>
59
+
60
+ ### Recomendações
61
+ - <ação corretiva para cada violação>
62
+ ```
63
+
64
+ 5. **Se não houver violações**, confirme que o código está em conformidade com `pastelsdd/context/architecture.md`.
@@ -0,0 +1,66 @@
1
+ # /pstld:dod — Verificação de Definition of Done
2
+
3
+ Você é um quality gate verificando se o item de trabalho corrente atende todos os critérios de Definition of Done do projeto.
4
+
5
+ ## Passos
6
+
7
+ 1. **Leia os critérios de DoD**
8
+
9
+ - Leia `pastelsdd/context/dod.md` para carregar os critérios oficiais de DoD do projeto.
10
+ - Se `pastelsdd/context/dod.md` não existir, informe o usuário:
11
+ ```
12
+ ℹ️ Arquivo pastelsdd/context/dod.md não encontrado.
13
+ Execute pscode init --profile dixi para instalar os context docs da Dixi.
14
+ Enquanto isso, usarei critérios genéricos de DoD.
15
+ ```
16
+ Use os critérios genéricos listados no passo 3.
17
+
18
+ 2. **Identifique o item em progresso**
19
+
20
+ Pergunte ao usuário (se não fornecido como argumento):
21
+ - Qual é o item sendo avaliado? (nome da feature, ticket JIRA, change do pscode)
22
+ - Há contexto adicional relevante (PR aberto, branch, change name)?
23
+
24
+ 3. **Verifique cada critério**
25
+
26
+ Para cada critério em `pastelsdd/context/dod.md` (ou os genéricos abaixo), avalie o estado atual:
27
+
28
+ **Critérios genéricos (usados quando dod.md não existe):**
29
+ - Código implementado e funcionando
30
+ - Testes unitários escritos e passando
31
+ - Testes de integração cobrindo o fluxo principal
32
+ - Code review realizado ou solicitado
33
+ - Documentação atualizada (se aplicável)
34
+ - Sem violações de arquitetura detectadas
35
+ - Build passando sem erros
36
+ - Deploy em ambiente de testes validado
37
+
38
+ 4. **Produza o relatório de DoD**
39
+
40
+ ```markdown
41
+ ## Definition of Done — <nome do item>
42
+
43
+ **Data:** <data atual>
44
+ **Fonte dos critérios:** pastelsdd/context/dod.md | critérios genéricos
45
+
46
+ | Critério | Status | Observação |
47
+ |----------|--------|------------|
48
+ | <critério 1> | ✅ Atendido | ... |
49
+ | <critério 2> | ❌ Pendente | <o que falta> |
50
+ | <critério 3> | ⚠️ Parcial | <o que está incompleto> |
51
+
52
+ ### Resumo
53
+ - ✅ Atendidos: N
54
+ - ❌ Pendentes: N
55
+ - ⚠️ Parciais: N
56
+
57
+ ### Próximos Passos
58
+ <lista das ações necessárias para completar os critérios pendentes>
59
+
60
+ **Conclusão:** ✅ Pronto para entrega | ❌ Não está pronto — N critérios pendentes
61
+ ```
62
+
63
+ 5. **Orientação final**
64
+
65
+ - Se todos os critérios estiverem atendidos: sugira `/ps:complete` para arquivar a change.
66
+ - Se houver pendências: liste as ações prioritárias para concluir o item.
@@ -0,0 +1,80 @@
1
+ # /pstld:jira-draft — Criar rascunho de issue JIRA
2
+
3
+ Você é um assistente de integração JIRA criando uma issue a partir do contexto da change atual.
4
+
5
+ ## Passos
6
+
7
+ 1. **Leia a configuração JIRA local**
8
+
9
+ Leia o arquivo `pastelsdd/jira.yaml` na raiz do projeto.
10
+
11
+ - **Se o arquivo não existir ou `configured: false`:**
12
+ ```
13
+ ℹ️ Integração JIRA não configurada.
14
+ Execute /pstld:jira-setup para configurar o projeto, tipo de issue e transição "done".
15
+ ```
16
+ Encerre aqui.
17
+
18
+ 2. **Identifique a change ativa**
19
+
20
+ Verifique se há uma change ativa em `pscode/changes/`. Se houver exatamente uma, use-a. Se houver várias, peça ao usuário para especificar. Se não houver nenhuma, solicite título e descrição manualmente.
21
+
22
+ - **Se a change for identificada:** leia `proposal.md` e `.pscode.yaml` para extrair título e contexto.
23
+ - **Se não houver change:** solicite título e descrição ao usuário antes de continuar.
24
+
25
+ 3. **Verifique disponibilidade do MCP Atlassian**
26
+
27
+ Tente obter informações do usuário autenticado:
28
+
29
+ ```tool
30
+ mcp__atlassian__get_current_user
31
+ ```
32
+
33
+ - **Se falhar:**
34
+ ```
35
+ ⚠️ MCP Atlassian não está disponível nesta sessão.
36
+ Verifique se o servidor MCP está configurado em .mcp.json e reinicie o Claude Code.
37
+ ```
38
+ Encerre aqui.
39
+
40
+ 4. **Crie a issue JIRA**
41
+
42
+ Use os dados de `jira.yaml` (`projectKey`, `defaultIssueType`) e o contexto da change para criar a issue:
43
+
44
+ ```tool
45
+ mcp__atlassian__create_issue
46
+ project: <projectKey de jira.yaml>
47
+ summary: <título da change>
48
+ description: <descrição derivada do proposal.md ou fornecida pelo usuário>
49
+ issuetype: <defaultIssueType de jira.yaml>
50
+ ```
51
+
52
+ 5. **Vincule a issue à change**
53
+
54
+ Se a issue for criada com sucesso e a change for identificada, grave o `jiraIssueKey` no `.pscode.yaml` da change:
55
+
56
+ - Leia o `.pscode.yaml` atual
57
+ - Adicione ou atualize o campo `jiraIssueKey` com a chave retornada (ex: `PROJ-123`)
58
+ - Salve o arquivo
59
+
60
+ 6. **Exiba o resultado**
61
+
62
+ ```markdown
63
+ ## Issue JIRA Criada ✅
64
+
65
+ **Issue:** <jiraIssueKey>
66
+ **Título:** <summary>
67
+ **Projeto:** <projectKey>
68
+ **Tipo:** <defaultIssueType>
69
+ **Link:** <url da issue>
70
+
71
+ O campo `jiraIssueKey` foi gravado em `.pscode.yaml`.
72
+ Ao executar `pscode complete`, a issue será transitada para "done" automaticamente.
73
+ ```
74
+
75
+ 7. **Tratamento de erros**
76
+
77
+ Para qualquer falha não coberta acima, exiba uma mensagem descritiva e sugira:
78
+ - Verificar conectividade de rede
79
+ - Confirmar permissões do token Atlassian
80
+ - Verificar `projectKey` e `defaultIssueType` em `pastelsdd/jira.yaml`
@@ -0,0 +1,105 @@
1
+ # /pstld:jira-setup — Configurar integração JIRA
2
+
3
+ Você é um assistente de configuração JIRA guiando o desenvolvedor na criação ou atualização de `pastelsdd/jira.yaml`.
4
+
5
+ ## Passos
6
+
7
+ 1. **Verifique disponibilidade do MCP Atlassian**
8
+
9
+ Tente obter informações do usuário autenticado:
10
+
11
+ ```tool
12
+ mcp__atlassian__get_current_user
13
+ ```
14
+
15
+ - **Se falhar:**
16
+ ```
17
+ ⚠️ MCP Atlassian não está disponível nesta sessão.
18
+ Para configurar, adicione ao .mcp.json do projeto:
19
+
20
+ {
21
+ "mcpServers": {
22
+ "atlassian": {
23
+ "command": "npx",
24
+ "args": ["-y", "mcp-remote", "https://mcp.atlassian.com/v1/sse"]
25
+ }
26
+ }
27
+ }
28
+
29
+ Reinicie o Claude Code após adicionar a configuração.
30
+ ```
31
+ Encerre aqui.
32
+
33
+ 2. **Leia configuração existente (se houver)**
34
+
35
+ Tente ler `pastelsdd/jira.yaml`. Se existir e tiver valores, exiba-os como ponto de partida:
36
+ ```
37
+ Configuração atual encontrada:
38
+ Projeto: <projectKey>
39
+ Tipo de issue: <defaultIssueType>
40
+ Transição "done": <transitions.done>
41
+ ```
42
+
43
+ 3. **Selecione o projeto JIRA**
44
+
45
+ Liste os projetos acessíveis:
46
+
47
+ ```tool
48
+ mcp__atlassian__list_projects
49
+ ```
50
+
51
+ Apresente a lista ao usuário e peça para selecionar o projeto padrão para novas issues.
52
+ Se já houver um `projectKey` configurado, destaque-o como opção atual.
53
+
54
+ 4. **Selecione o tipo de issue padrão**
55
+
56
+ Liste os tipos de issue disponíveis para o projeto selecionado:
57
+
58
+ ```tool
59
+ mcp__atlassian__get_issue_types
60
+ project: <projectKey selecionado>
61
+ ```
62
+
63
+ Apresente a lista. O tipo padrão usual é "Story" ou "Task" — destaque se disponível.
64
+
65
+ 5. **Selecione a transição "done"**
66
+
67
+ Liste as transições disponíveis no workflow do projeto:
68
+
69
+ ```tool
70
+ mcp__atlassian__get_transitions
71
+ project: <projectKey selecionado>
72
+ ```
73
+
74
+ Apresente as transições e peça ao usuário para identificar qual representa "concluído/done".
75
+ Grave o **ID numérico** da transição escolhida (não o nome, pois IDs são estáveis).
76
+
77
+ 6. **Grave pastelsdd/jira.yaml**
78
+
79
+ Crie ou sobrescreva o arquivo com as escolhas:
80
+
81
+ ```yaml
82
+ project_key: "<projectKey>"
83
+ default_issue_type: "<defaultIssueType>"
84
+ configured: true
85
+ transitions:
86
+ done: "<ID da transição done>"
87
+ ```
88
+
89
+ Preserve quaisquer campos adicionais existentes no arquivo que não foram alterados.
90
+
91
+ 7. **Exiba resumo da configuração**
92
+
93
+ ```markdown
94
+ ## Integração JIRA Configurada ✅
95
+
96
+ **Projeto:** <projectKey>
97
+ **Tipo de issue padrão:** <defaultIssueType>
98
+ **Transição "done":** <nome> (ID: <id>)
99
+
100
+ ### Próximos passos
101
+ - Use /pstld:jira-draft para criar uma issue JIRA a partir da change atual
102
+ - Adicione `jiraIssueKey` ao .pscode.yaml de uma change para vinculá-la a uma issue existente
103
+ - Ao executar `pscode complete`, a issue vinculada será transitada para "done" automaticamente
104
+ - Use /pstld:jira-sync para verificar a conexão a qualquer momento
105
+ ```
@@ -0,0 +1,69 @@
1
+ # /pstld:jira-sync — Verificação e sincronização com JIRA
2
+
3
+ Você é um assistente de integração JIRA verificando a configuração e conexão com o projeto atual.
4
+
5
+ ## Passos
6
+
7
+ 1. **Leia a configuração JIRA local**
8
+
9
+ Leia o arquivo `pastelsdd/jira.yaml` na raiz do projeto.
10
+
11
+ - **Se o arquivo não existir:** informe o usuário de forma amigável:
12
+ ```
13
+ ℹ️ Integração JIRA não configurada.
14
+ Para configurar, rode: /pstld:jira-setup
15
+ O arquivo pastelsdd/jira.yaml será criado com suas preferências.
16
+ ```
17
+ Encerre aqui.
18
+
19
+ - **Se `configured: false`:** informe:
20
+ ```
21
+ ⚠️ Integração JIRA presente mas não ativada (configured: false).
22
+ Edite pastelsdd/jira.yaml e defina configured: true após preencher os campos.
23
+ ```
24
+ Mostre o conteúdo atual do arquivo para o usuário revisar. Encerre aqui.
25
+
26
+ 2. **Teste a conexão via MCP Atlassian**
27
+
28
+ Se `configured: true`, tente obter informações do usuário autenticado:
29
+
30
+ ```tool
31
+ mcp__atlassian__get_current_user
32
+ ```
33
+
34
+ - **Se o MCP não estiver disponível ou falhar:** informe:
35
+ ```
36
+ ⚠️ MCP Atlassian não está disponível nesta sessão.
37
+ Verifique se o MCP está configurado em .mcp.json e reinicie o Claude Code.
38
+ Configuração esperada: pastelsdd/jira.yaml → cloudId: <seu-cloud-id>
39
+ ```
40
+ Encerre aqui.
41
+
42
+ 3. **Exiba o status da integração**
43
+
44
+ Produza um resumo claro:
45
+
46
+ ```markdown
47
+ ## Status da Integração JIRA ✅
48
+
49
+ **Usuário autenticado:** <nome do usuário>
50
+ **Cloud ID:** <cloudId de pastelsdd/jira.yaml>
51
+ **Projeto padrão:** <projectKey de pastelsdd/jira.yaml>
52
+ **Tipo de issue padrão:** <defaultIssueType>
53
+
54
+ ### Verificações
55
+ - ✅ pastelsdd/jira.yaml encontrado e configurado
56
+ - ✅ MCP Atlassian disponível e autenticado
57
+ - ✅ Conexão com JIRA estabelecida
58
+
59
+ ### Próximos passos
60
+ - Use /pstld:jira-draft para criar um rascunho de issue JIRA
61
+ - Vincule uma change ao JIRA adicionando jiraIssueKey ao .pscode.yaml
62
+ ```
63
+
64
+ 4. **Exibição de erros inesperados**
65
+
66
+ Para qualquer falha não coberta acima, mostre uma mensagem descritiva e sugira verificar:
67
+ - A conectividade de rede
68
+ - As permissões do token Atlassian
69
+ - O `cloudId` em `pastelsdd/jira.yaml`