spec-first-copilot 0.4.0 → 0.5.0-beta.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/README.md +156 -148
- package/bin/cli.js +52 -52
- package/lib/init.js +89 -89
- package/package.json +11 -4
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/agents/backend-coder.md +215 -215
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +48 -51
- package/templates/.github/agents/frontend-coder.md +222 -222
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +99 -99
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +194 -175
- package/templates/.github/instructions/docs.instructions.md +123 -123
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/{docs/Desenvolvimento → .github}/rules.md +229 -229
- package/templates/.github/skills/sf-design/SKILL.md +180 -181
- package/templates/.github/skills/sf-dev/SKILL.md +349 -349
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
- package/templates/.github/skills/sf-extract/SKILL.md +284 -284
- package/templates/.github/skills/sf-feature/SKILL.md +130 -130
- package/templates/.github/skills/sf-merge-delta/SKILL.md +145 -142
- package/templates/.github/skills/sf-plan/SKILL.md +178 -178
- package/templates/.github/skills/sf-session-finish/SKILL.md +120 -120
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -123
- package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +151 -144
- package/templates/.github/templates/estrutura/architecture.template.md +158 -0
- package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +202 -138
- package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +99 -91
- package/templates/.github/templates/estrutura/domain.template.md +148 -0
- package/templates/{docs/_templates → .github/templates}/feature/PRD.template.md +256 -256
- package/templates/{docs/_templates → .github/templates}/feature/Progresso.template.md +136 -136
- package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
- package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +154 -154
- package/templates/{docs/_templates → .github/templates}/feature/context.template.md +42 -42
- package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +38 -38
- package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +73 -73
- package/templates/{docs/_templates → .github/templates}/feature/sdd.template.md +372 -372
- package/templates/{docs/_templates → .github/templates}/feature/tasks.template.md +115 -115
- package/templates/{docs/_templates → .github/templates}/global/progresso_global.template.md +57 -57
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +0 -82
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +0 -104
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +0 -99
- package/templates/docs/_templates/estrutura/Stack.template.md +0 -78
- package/templates/docs/_templates/estrutura/Visao.template.md +0 -82
- /package/templates/docs/{Desenvolvimento/.gitkeep → .gitkeep} +0 -0
- /package/templates/{docs/Estrutura → workspace/Input}/.gitkeep +0 -0
- /package/templates/{docs/PM → workspace/Input/setup_projeto}/.gitkeep +0 -0
- /package/templates/{docs/PM/setup_projeto → workspace/Output}/.gitkeep +0 -0
|
@@ -1,91 +1,99 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
> Registro de decisões arquiteturais com contexto, alternativas e consequências.
|
|
4
|
-
> Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<!--
|
|
9
|
-
=============================================================================
|
|
10
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
|
-
=============================================================================
|
|
12
|
-
|
|
13
|
-
ORIGEM: Criado pelo /setup-projeto com
|
|
14
|
-
ATUALIZAÇÃO: Novas
|
|
15
|
-
- /setup-projeto define stack e arquitetura (
|
|
16
|
-
- /design gera SDD §2 com decisões de design significativas
|
|
17
|
-
- /merge-delta detecta mudança de stack ou padrão
|
|
18
|
-
- Usuário toma decisão que impacta arquitetura
|
|
19
|
-
|
|
20
|
-
COMO GERAR:
|
|
21
|
-
1. Para cada decisão significativa, criar
|
|
22
|
-
2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
|
|
23
|
-
3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
|
|
24
|
-
4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
|
|
25
|
-
|
|
26
|
-
REGRAS:
|
|
27
|
-
- IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
|
|
28
|
-
- NUNCA editar
|
|
29
|
-
- Status "proposta" = ainda em discussão, não implementar até aceitar
|
|
30
|
-
- Toda mudança de stack, banco, framework DEVE ter
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
QUANDO CRIAR
|
|
34
|
-
- Escolha de tecnologia/framework
|
|
35
|
-
- Mudança de padrão de design
|
|
36
|
-
- Decisão de infra (cloud provider, DB engine)
|
|
37
|
-
- Trade-off significativo (performance vs simplicidade, etc.)
|
|
38
|
-
|
|
39
|
-
QUANDO NÃO CRIAR
|
|
40
|
-
- Escolha de nome de variável
|
|
41
|
-
- Implementação seguindo padrão já definido
|
|
42
|
-
- Bug fix
|
|
43
|
-
- Refactor sem mudança de interface
|
|
44
|
-
|
|
45
|
-
=============================================================================
|
|
46
|
-
-->
|
|
47
|
-
|
|
48
|
-
## Índice
|
|
49
|
-
|
|
50
|
-
| ADR | Título | Status | Data |
|
|
51
|
-
|-----|--------|--------|------|
|
|
52
|
-
| ADR-001 | {{Título}} | proposta / aceita / substituída / descartada | |
|
|
53
|
-
|
|
54
|
-
## Formato
|
|
55
|
-
|
|
56
|
-
Cada
|
|
57
|
-
|
|
58
|
-
```markdown
|
|
59
|
-
### ADR-NNN: Título da Decisão
|
|
60
|
-
- **Status**: proposta | aceita | substituída por ADR-XXX | descartada
|
|
61
|
-
- **Data**: YYYY-MM-DD
|
|
62
|
-
- **Contexto**: Por que essa decisão foi necessária?
|
|
63
|
-
- **Decisão**: O que decidimos?
|
|
64
|
-
- **Alternativas consideradas**:
|
|
65
|
-
1. Alternativa A — rejeitada porque...
|
|
66
|
-
2. Alternativa B — rejeitada porque...
|
|
67
|
-
- **Consequências**:
|
|
68
|
-
- Positivas: ...
|
|
69
|
-
- Negativas: ...
|
|
70
|
-
- Riscos: ...
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Decisões
|
|
76
|
-
|
|
77
|
-
### ADR-001: {{Título}}
|
|
78
|
-
- **Status**: aceita
|
|
79
|
-
- **Data**:
|
|
80
|
-
- **Contexto**:
|
|
81
|
-
- **Decisão**:
|
|
82
|
-
- **Alternativas consideradas**:
|
|
83
|
-
1. —
|
|
84
|
-
- **Consequências**:
|
|
85
|
-
- Positivas:
|
|
86
|
-
- Negativas:
|
|
87
|
-
- Riscos:
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
> **Regra**:
|
|
1
|
+
# Decisões — Architecture Decision Records
|
|
2
|
+
|
|
3
|
+
> Registro de decisões arquiteturais com contexto, alternativas e consequências.
|
|
4
|
+
> Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
=============================================================================
|
|
10
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
|
+
=============================================================================
|
|
12
|
+
|
|
13
|
+
ORIGEM: Criado pelo /setup-projeto com decisões iniciais (stack, arquitetura base).
|
|
14
|
+
ATUALIZAÇÃO: Novas decisões adicionadas quando:
|
|
15
|
+
- /setup-projeto define stack e arquitetura (decisões iniciais)
|
|
16
|
+
- /design gera SDD §2 com decisões de design significativas
|
|
17
|
+
- /merge-delta detecta mudança de stack ou padrão arquitetural
|
|
18
|
+
- Usuário toma decisão que impacta arquitetura
|
|
19
|
+
|
|
20
|
+
COMO GERAR:
|
|
21
|
+
1. Para cada decisão significativa, criar registro com TODOS os campos
|
|
22
|
+
2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
|
|
23
|
+
3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
|
|
24
|
+
4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
|
|
25
|
+
|
|
26
|
+
REGRAS:
|
|
27
|
+
- IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
|
|
28
|
+
- NUNCA editar decisão com status "aceita" — criar nova com "substituída por ADR-XXX"
|
|
29
|
+
- Status "proposta" = ainda em discussão, não implementar até aceitar
|
|
30
|
+
- Toda mudança de stack, banco, framework DEVE ter registro aqui
|
|
31
|
+
- Decisões são APPEND-ONLY — histórico importa
|
|
32
|
+
|
|
33
|
+
QUANDO CRIAR:
|
|
34
|
+
- Escolha de tecnologia/framework
|
|
35
|
+
- Mudança de padrão de design
|
|
36
|
+
- Decisão de infra (cloud provider, DB engine)
|
|
37
|
+
- Trade-off significativo (performance vs simplicidade, etc.)
|
|
38
|
+
|
|
39
|
+
QUANDO NÃO CRIAR:
|
|
40
|
+
- Escolha de nome de variável
|
|
41
|
+
- Implementação seguindo padrão já definido
|
|
42
|
+
- Bug fix
|
|
43
|
+
- Refactor sem mudança de interface
|
|
44
|
+
|
|
45
|
+
=============================================================================
|
|
46
|
+
-->
|
|
47
|
+
|
|
48
|
+
## Índice
|
|
49
|
+
|
|
50
|
+
| ADR | Título | Status | Data |
|
|
51
|
+
|-----|--------|--------|------|
|
|
52
|
+
| ADR-001 | {{Título}} | proposta / aceita / substituída / descartada | |
|
|
53
|
+
|
|
54
|
+
## Formato
|
|
55
|
+
|
|
56
|
+
Cada decisão segue este modelo:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
### ADR-NNN: Título da Decisão
|
|
60
|
+
- **Status**: proposta | aceita | substituída por ADR-XXX | descartada
|
|
61
|
+
- **Data**: YYYY-MM-DD
|
|
62
|
+
- **Contexto**: Por que essa decisão foi necessária?
|
|
63
|
+
- **Decisão**: O que decidimos?
|
|
64
|
+
- **Alternativas consideradas**:
|
|
65
|
+
1. Alternativa A — rejeitada porque...
|
|
66
|
+
2. Alternativa B — rejeitada porque...
|
|
67
|
+
- **Consequências**:
|
|
68
|
+
- Positivas: ...
|
|
69
|
+
- Negativas: ...
|
|
70
|
+
- Riscos: ...
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Decisões
|
|
76
|
+
|
|
77
|
+
### ADR-001: {{Título}}
|
|
78
|
+
- **Status**: aceita
|
|
79
|
+
- **Data**:
|
|
80
|
+
- **Contexto**:
|
|
81
|
+
- **Decisão**:
|
|
82
|
+
- **Alternativas consideradas**:
|
|
83
|
+
1. —
|
|
84
|
+
- **Consequências**:
|
|
85
|
+
- Positivas:
|
|
86
|
+
- Negativas:
|
|
87
|
+
- Riscos:
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
> **Regra**: Decisões aceitas são imutáveis. Para reverter, criar nova decisão com status "substituída por ADR-XXX" na original.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Changelog
|
|
96
|
+
|
|
97
|
+
| Data | Feature | Tipo | Descrição |
|
|
98
|
+
|------|---------|------|-----------|
|
|
99
|
+
| | | | |
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Domínio
|
|
2
|
+
|
|
3
|
+
> Visão de negócio + modelo de dados.
|
|
4
|
+
> O que o sistema é, quem usa, com o que integra, quais entidades existem e como se relacionam.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
=============================================================================
|
|
10
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
|
+
=============================================================================
|
|
12
|
+
|
|
13
|
+
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §1 (Visão) e §4 (Modelo de Dados Base).
|
|
14
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam/alteram tabelas, entidades,
|
|
15
|
+
atores, integrações externas ou termos de domínio.
|
|
16
|
+
|
|
17
|
+
COMO GERAR:
|
|
18
|
+
1. Ler TRD §1 (Visão do Sistema) — contexto, atores, integrações
|
|
19
|
+
2. Ler TRD §4 (Modelo de Dados Base) — tabelas iniciais, convenções
|
|
20
|
+
3. Descrever o sistema em 2-3 frases objetivas (O QUE, PARA QUEM, QUAL PROBLEMA)
|
|
21
|
+
4. Listar TODOS os atores com permissões gerais (o que PODE e o que NÃO pode)
|
|
22
|
+
5. Listar TODAS as integrações externas com direção explícita
|
|
23
|
+
6. Gerar diagrama ER textual com TODAS as relações
|
|
24
|
+
7. Catálogo de tabelas com tipos EXATOS do banco (varchar(255), não "string")
|
|
25
|
+
8. Glossário (DDD ubiquitous language) é obrigatório
|
|
26
|
+
|
|
27
|
+
O QUE NÃO VAI AQUI:
|
|
28
|
+
- Roadmap de módulos → vive no backlog faseado, não no Estrutura
|
|
29
|
+
- Containers, stack, deploy → architecture.md
|
|
30
|
+
- Autorização, LGPD, auditoria → conventions.md
|
|
31
|
+
|
|
32
|
+
REGRAS:
|
|
33
|
+
- Atores devem ter permissões gerais claras
|
|
34
|
+
- Integrações devem ter direção explícita (envia/recebe/ambos)
|
|
35
|
+
- Toda FK define ON DELETE/ON UPDATE
|
|
36
|
+
- Índices precisam de justificativa (query que justifica)
|
|
37
|
+
- Convenções de nomenclatura são LEI — SDDs seguem à risca
|
|
38
|
+
- Glossário não é opcional — termos ambíguos geram bugs
|
|
39
|
+
|
|
40
|
+
=============================================================================
|
|
41
|
+
-->
|
|
42
|
+
|
|
43
|
+
## O que é este sistema?
|
|
44
|
+
|
|
45
|
+
<!-- Descrição em 2-3 frases. O que ele faz, para quem, qual problema resolve. -->
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Usuários e Papéis
|
|
49
|
+
|
|
50
|
+
| Papel | O que faz | O que NÃO pode fazer | Nível de acesso |
|
|
51
|
+
|-------|-----------|----------------------|-----------------|
|
|
52
|
+
| | | | |
|
|
53
|
+
|
|
54
|
+
## Integrações Externas
|
|
55
|
+
|
|
56
|
+
| Sistema/Serviço | Tipo (API/Webhook/Arquivo/Fila) | Direção (Envia/Recebe/Ambos) | Descrição | SLA/Disponibilidade |
|
|
57
|
+
|-----------------|--------------------------------|------------------------------|-----------|---------------------|
|
|
58
|
+
| | | | | |
|
|
59
|
+
|
|
60
|
+
## Restrições e Premissas
|
|
61
|
+
|
|
62
|
+
### Restrições técnicas
|
|
63
|
+
-
|
|
64
|
+
|
|
65
|
+
### Restrições de negócio
|
|
66
|
+
-
|
|
67
|
+
|
|
68
|
+
### Premissas
|
|
69
|
+
-
|
|
70
|
+
|
|
71
|
+
## Glossário
|
|
72
|
+
|
|
73
|
+
> Termos do domínio usados em todo o projeto. Linguagem ubíqua (DDD).
|
|
74
|
+
|
|
75
|
+
| Termo | Definição | Exemplo de uso |
|
|
76
|
+
|-------|-----------|----------------|
|
|
77
|
+
| | | |
|
|
78
|
+
|
|
79
|
+
## Modelo de Dados
|
|
80
|
+
|
|
81
|
+
### Diagrama ER
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
<!-- Representação textual do ER -->
|
|
85
|
+
<!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Convenções de Nomenclatura
|
|
89
|
+
|
|
90
|
+
| Elemento | Convenção | Exemplo |
|
|
91
|
+
|----------|-----------|---------|
|
|
92
|
+
| Tabelas | snake_case, plural | `clientes`, `pedidos` |
|
|
93
|
+
| Colunas | snake_case | `nome_completo`, `criado_em` |
|
|
94
|
+
| PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
|
|
95
|
+
| FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
|
|
96
|
+
| Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
|
|
97
|
+
| Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
|
|
98
|
+
| Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
|
|
99
|
+
| Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
|
|
100
|
+
| Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
|
|
101
|
+
|
|
102
|
+
### Catálogo de Tabelas
|
|
103
|
+
|
|
104
|
+
<!-- Repetir bloco para cada tabela -->
|
|
105
|
+
|
|
106
|
+
#### {{tabela}}
|
|
107
|
+
|
|
108
|
+
> Descrição breve da tabela.
|
|
109
|
+
|
|
110
|
+
| Coluna | Tipo | Nullable | Default | Constraint | Descrição |
|
|
111
|
+
|--------|------|----------|---------|------------|-----------|
|
|
112
|
+
| | | | | | |
|
|
113
|
+
|
|
114
|
+
**Relações:**
|
|
115
|
+
- `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
|
|
116
|
+
|
|
117
|
+
**Índices:**
|
|
118
|
+
|
|
119
|
+
| Nome | Colunas | Tipo | Justificativa |
|
|
120
|
+
|------|---------|------|---------------|
|
|
121
|
+
| | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
|
|
122
|
+
|
|
123
|
+
### Estratégia de Migrations
|
|
124
|
+
|
|
125
|
+
| Aspecto | Convenção |
|
|
126
|
+
|---------|-----------|
|
|
127
|
+
| Ferramenta | <!-- Ex: knex, prisma, flyway, alembic, EF Core --> |
|
|
128
|
+
| Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
|
|
129
|
+
| Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
|
|
130
|
+
| Execução | <!-- Sequencial? Transacional? --> |
|
|
131
|
+
| Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
|
|
132
|
+
|
|
133
|
+
### Regras Globais de Dados
|
|
134
|
+
|
|
135
|
+
| Regra | Descrição |
|
|
136
|
+
|-------|-----------|
|
|
137
|
+
| Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
|
|
138
|
+
| Auditoria | <!-- criado_por/atualizado_por em todas? --> |
|
|
139
|
+
| Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
|
|
140
|
+
| Encoding | <!-- UTF-8? Collation? --> |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Changelog
|
|
145
|
+
|
|
146
|
+
| Data | Feature | Tipo | Descrição |
|
|
147
|
+
|------|---------|------|-----------|
|
|
148
|
+
| | | | |
|