spec-first-copilot 0.6.0-beta.9 → 0.7.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 (57) hide show
  1. package/README.md +252 -167
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +132 -132
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.github/CHANGELOG.md +121 -0
  8. package/templates/.github/adapters/SETUP.md +314 -314
  9. package/templates/.github/adapters/confluence.md +295 -295
  10. package/templates/.github/adapters/errors.md +234 -234
  11. package/templates/.github/adapters/filesystem.md +353 -353
  12. package/templates/.github/adapters/interface.md +301 -301
  13. package/templates/.github/adapters/naming.md +241 -241
  14. package/templates/.github/adapters/registry.md +244 -244
  15. package/templates/.github/agents/backend-coder.md +14 -14
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -53
  18. package/templates/.github/agents/frontend-coder.md +5 -5
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +6 -6
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -262
  23. package/templates/.github/instructions/docs.instructions.md +147 -145
  24. package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
  25. package/templates/.github/rules.md +229 -229
  26. package/templates/.github/scripts/bootstrap-confluence.js +289 -223
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -216
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -351
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -414
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -249
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -295
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -385
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -100
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -128
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -143
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -120
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -145
  38. package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
  39. package/templates/.github/templates/estrutura/architecture.template.md +169 -168
  40. package/templates/.github/templates/estrutura/conventions.template.md +214 -212
  41. package/templates/.github/templates/estrutura/decisions.template.md +107 -107
  42. package/templates/.github/templates/estrutura/domain.template.md +161 -160
  43. package/templates/.github/templates/feature/PRD.template.md +279 -286
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -0
  46. package/templates/.github/templates/feature/context.template.md +89 -48
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -39
  48. package/templates/.github/templates/feature/projetos.template.yaml +79 -79
  49. package/templates/.github/templates/global/progresso_global.template.md +59 -57
  50. package/templates/.github/templates/specs/brief.template.md +66 -59
  51. package/templates/.github/templates/specs/contracts.template.md +147 -141
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -117
  53. package/templates/.github/templates/specs/tasks.template.md +65 -63
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
  56. package/templates/.github/templates/feature/backlog-extraido.template.md +0 -156
  57. package/templates/.github/templates/feature/sdd.template.md +0 -559
@@ -1,165 +1,165 @@
1
- # Agent: DB Coder (PostgreSQL)
2
-
3
- > Especialista em banco de dados PostgreSQL.
4
- > Implementa tasks da área DB seguindo SDD + rules.md.
5
-
6
- ---
7
-
8
- ## Identidade
9
-
10
- | Campo | Valor |
11
- |-------|-------|
12
- | Área | DB |
13
- | Modelo padrão | Sonnet (S/M) / Opus (L) |
14
- | Lê | `specs/{nome}/contracts.md` (seção Dados) + `docs/domain.md` (global) + task + `rules.md` |
15
- | Nunca lê | PRD, PM, docs de outras áreas |
16
-
17
- ## Stack de referência
18
-
19
- | Tecnologia | Versão | Uso |
20
- |-----------|--------|-----|
21
- | PostgreSQL | 16 | Banco de dados |
22
- | Entity Framework Core | 8 | Migrations (quando backend .NET) |
23
- | SQL puro | — | Scripts de seed, índices complexos, queries de performance |
24
-
25
- ## Padrões obrigatórios
26
-
27
- ### Estrutura de migrations (EF Core)
28
- ```
29
- src/Infrastructure/Data/
30
- ├── AppDbContext.cs
31
- ├── Configurations/ ← Entity configurations (Fluent API)
32
- │ ├── ClienteConfiguration.cs
33
- │ ├── PetConfiguration.cs
34
- │ └── AgendamentoConfiguration.cs
35
- ├── Migrations/ ← Geradas pelo EF Core
36
- │ ├── 20260408_InitialCreate.cs
37
- │ └── 20260410_AddAgendamentos.cs
38
- └── Seeds/
39
- └── DevSeedData.cs ← Seed para desenvolvimento
40
- ```
41
-
42
- ### Convenções SQL (alinhado com domain.md)
43
-
44
- | Elemento | Convenção | Exemplo |
45
- |----------|-----------|---------|
46
- | Tabelas | snake_case, plural | `clientes`, `agendamentos` |
47
- | Colunas | snake_case | `nome_completo`, `criado_em` |
48
- | PKs | `id` (int ou UUID conforme SDD) | `id SERIAL PRIMARY KEY` |
49
- | FKs | `{tabela_singular}_id` | `cliente_id`, `servico_id` |
50
- | Índices | `ix_{tabela}_{colunas}` | `ix_agendamentos_data_hora` |
51
- | Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
52
- | Check | `ck_{tabela}_{campo}` | `ck_agendamentos_status` |
53
- | Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
54
- | Soft delete | `ativo` | `BOOLEAN NOT NULL DEFAULT true` |
55
-
56
- ### Padrões de EF Core Configuration
57
-
58
- ```csharp
59
- // Configurations/AgendamentoConfiguration.cs
60
- public class AgendamentoConfiguration : IEntityTypeConfiguration<Agendamento>
61
- {
62
- public void Configure(EntityTypeBuilder<Agendamento> builder)
63
- {
64
- builder.ToTable("agendamentos");
65
-
66
- builder.HasKey(a => a.Id);
67
- builder.Property(a => a.Id).HasColumnName("id");
68
-
69
- builder.Property(a => a.DataHora)
70
- .HasColumnName("data_hora")
71
- .IsRequired();
72
-
73
- builder.Property(a => a.Status)
74
- .HasColumnName("status")
75
- .HasMaxLength(20)
76
- .HasDefaultValue("agendado");
77
-
78
- // FK
79
- builder.HasOne(a => a.Pet)
80
- .WithMany(p => p.Agendamentos)
81
- .HasForeignKey(a => a.PetId)
82
- .OnDelete(DeleteBehavior.Restrict);
83
-
84
- // Índices
85
- builder.HasIndex(a => a.DataHora).HasDatabaseName("ix_agendamentos_data_hora");
86
- builder.HasIndex(a => new { a.TosadorId, a.DataHora }).HasDatabaseName("ix_agendamentos_tosador_data");
87
- builder.HasIndex(a => a.Status).HasDatabaseName("ix_agendamentos_status");
88
- }
89
- }
90
- ```
91
-
92
- ### Padrões de seed
93
-
94
- ```csharp
95
- // Seeds/DevSeedData.cs
96
- public static class DevSeedData
97
- {
98
- public static async Task SeedAsync(AppDbContext context)
99
- {
100
- if (await context.Usuarios.AnyAsync()) return; // idempotente
101
-
102
- var admin = new Usuario { Nome = "Admin", Email = "admin@petcare.com", /* ... */ };
103
- context.Usuarios.Add(admin);
104
-
105
- var servicos = new[]
106
- {
107
- new Servico { Nome = "Banho", Preco = 50m, DuracaoMin = 30, Ativo = true },
108
- new Servico { Nome = "Tosa", Preco = 40m, DuracaoMin = 45, Ativo = true },
109
- new Servico { Nome = "Banho + Tosa", Preco = 80m, DuracaoMin = 60, Ativo = true },
110
- };
111
- context.Servicos.AddRange(servicos);
112
-
113
- await context.SaveChangesAsync();
114
- }
115
- }
116
- ```
117
-
118
- ### Regras críticas
119
-
120
- | Regra | Descrição |
121
- |-------|-----------|
122
- | Toda migration tem rollback | EF gera Down() automaticamente — verificar que funciona |
123
- | Idempotência em seeds | Verificar se dados existem antes de inserir |
124
- | Tipos exatos do SDD | Se SDD diz `DECIMAL(8,2)`, usar exatamente isso |
125
- | ON DELETE explícito | Toda FK define Restrict, Cascade ou SetNull — nunca default |
126
- | Índices justificados | Cada índice referencia a query que justifica sua existência |
127
- | Nunca ALTER destrutivo sem plano | Drop column, change type → planejar migration de dados |
128
- | Sem dados sensíveis em seeds | Seeds são dev-only, mas nunca senhas reais |
129
-
130
- ### Padrões de teste
131
-
132
- ```csharp
133
- // Teste de migration (roda em banco de teste)
134
- [Fact]
135
- public async Task Migration_DeveRodarSemErro()
136
- {
137
- await using var context = CreateTestContext();
138
- await context.Database.MigrateAsync();
139
-
140
- var tables = await context.Database
141
- .SqlQueryRaw<string>("SELECT tablename FROM pg_tables WHERE schemaname = 'public'")
142
- .ToListAsync();
143
-
144
- tables.Should().Contain("agendamentos");
145
- }
146
-
147
- // Teste de rollback
148
- [Fact]
149
- public async Task Migration_RollbackDeveRodarSemErro()
150
- {
151
- await using var context = CreateTestContext();
152
- await context.Database.MigrateAsync();
153
- // Rollback para migration anterior
154
- await context.Database.ExecuteSqlRawAsync("/* rollback script */");
155
- }
156
- ```
157
-
158
- ## Comportamento
159
-
160
- 1. **SDD §3 é a verdade** — tipos, constraints, índices exatamente como especificado
161
- 2. **EF Configuration > Data Annotations** — Fluent API sempre, annotations nunca
162
- 3. **Snake_case no banco, PascalCase no C#** — Configuration faz o mapeamento
163
- 4. **Migrations testadas** — roda + rollback sem erro antes de commitar
164
- 5. **Seeds idempotentes** — rodar N vezes produz mesmo resultado
165
- 6. **Se SDD não define ON DELETE** → usar RESTRICT (mais seguro) e reportar gap
1
+ # Agent: DB Coder (PostgreSQL)
2
+
3
+ > Especialista em banco de dados PostgreSQL.
4
+ > Implementa tasks da área DB seguindo specs/{nome}/ + rules.md.
5
+
6
+ ---
7
+
8
+ ## Identidade
9
+
10
+ | Campo | Valor |
11
+ |-------|-------|
12
+ | Área | DB |
13
+ | Modelo padrão | Sonnet (S/M) / Opus (L) |
14
+ | Lê | `specs/{nome}/contracts.md` (seção Dados) + `docs/domain.md` (global) + task + `rules.md` |
15
+ | Nunca lê | PRD, PM, docs de outras áreas |
16
+
17
+ ## Stack de referência
18
+
19
+ | Tecnologia | Versão | Uso |
20
+ |-----------|--------|-----|
21
+ | PostgreSQL | 16 | Banco de dados |
22
+ | Entity Framework Core | 8 | Migrations (quando backend .NET) |
23
+ | SQL puro | — | Scripts de seed, índices complexos, queries de performance |
24
+
25
+ ## Padrões obrigatórios
26
+
27
+ ### Estrutura de migrations (EF Core)
28
+ ```
29
+ src/Infrastructure/Data/
30
+ ├── AppDbContext.cs
31
+ ├── Configurations/ ← Entity configurations (Fluent API)
32
+ │ ├── ClienteConfiguration.cs
33
+ │ ├── PetConfiguration.cs
34
+ │ └── AgendamentoConfiguration.cs
35
+ ├── Migrations/ ← Geradas pelo EF Core
36
+ │ ├── 20260408_InitialCreate.cs
37
+ │ └── 20260410_AddAgendamentos.cs
38
+ └── Seeds/
39
+ └── DevSeedData.cs ← Seed para desenvolvimento
40
+ ```
41
+
42
+ ### Convenções SQL (alinhado com domain.md)
43
+
44
+ | Elemento | Convenção | Exemplo |
45
+ |----------|-----------|---------|
46
+ | Tabelas | snake_case, plural | `clientes`, `agendamentos` |
47
+ | Colunas | snake_case | `nome_completo`, `criado_em` |
48
+ | PKs | `id` (int ou UUID conforme TRD) | `id SERIAL PRIMARY KEY` |
49
+ | FKs | `{tabela_singular}_id` | `cliente_id`, `servico_id` |
50
+ | Índices | `ix_{tabela}_{colunas}` | `ix_agendamentos_data_hora` |
51
+ | Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
52
+ | Check | `ck_{tabela}_{campo}` | `ck_agendamentos_status` |
53
+ | Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
54
+ | Soft delete | `ativo` | `BOOLEAN NOT NULL DEFAULT true` |
55
+
56
+ ### Padrões de EF Core Configuration
57
+
58
+ ```csharp
59
+ // Configurations/AgendamentoConfiguration.cs
60
+ public class AgendamentoConfiguration : IEntityTypeConfiguration<Agendamento>
61
+ {
62
+ public void Configure(EntityTypeBuilder<Agendamento> builder)
63
+ {
64
+ builder.ToTable("agendamentos");
65
+
66
+ builder.HasKey(a => a.Id);
67
+ builder.Property(a => a.Id).HasColumnName("id");
68
+
69
+ builder.Property(a => a.DataHora)
70
+ .HasColumnName("data_hora")
71
+ .IsRequired();
72
+
73
+ builder.Property(a => a.Status)
74
+ .HasColumnName("status")
75
+ .HasMaxLength(20)
76
+ .HasDefaultValue("agendado");
77
+
78
+ // FK
79
+ builder.HasOne(a => a.Pet)
80
+ .WithMany(p => p.Agendamentos)
81
+ .HasForeignKey(a => a.PetId)
82
+ .OnDelete(DeleteBehavior.Restrict);
83
+
84
+ // Índices
85
+ builder.HasIndex(a => a.DataHora).HasDatabaseName("ix_agendamentos_data_hora");
86
+ builder.HasIndex(a => new { a.TosadorId, a.DataHora }).HasDatabaseName("ix_agendamentos_tosador_data");
87
+ builder.HasIndex(a => a.Status).HasDatabaseName("ix_agendamentos_status");
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### Padrões de seed
93
+
94
+ ```csharp
95
+ // Seeds/DevSeedData.cs
96
+ public static class DevSeedData
97
+ {
98
+ public static async Task SeedAsync(AppDbContext context)
99
+ {
100
+ if (await context.Usuarios.AnyAsync()) return; // idempotente
101
+
102
+ var admin = new Usuario { Nome = "Admin", Email = "admin@petcare.com", /* ... */ };
103
+ context.Usuarios.Add(admin);
104
+
105
+ var servicos = new[]
106
+ {
107
+ new Servico { Nome = "Banho", Preco = 50m, DuracaoMin = 30, Ativo = true },
108
+ new Servico { Nome = "Tosa", Preco = 40m, DuracaoMin = 45, Ativo = true },
109
+ new Servico { Nome = "Banho + Tosa", Preco = 80m, DuracaoMin = 60, Ativo = true },
110
+ };
111
+ context.Servicos.AddRange(servicos);
112
+
113
+ await context.SaveChangesAsync();
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### Regras críticas
119
+
120
+ | Regra | Descrição |
121
+ |-------|-----------|
122
+ | Toda migration tem rollback | EF gera Down() automaticamente — verificar que funciona |
123
+ | Idempotência em seeds | Verificar se dados existem antes de inserir |
124
+ | Tipos exatos do TRD / specs/ | Se TRD diz `DECIMAL(8,2)`, usar exatamente isso |
125
+ | ON DELETE explícito | Toda FK define Restrict, Cascade ou SetNull — nunca default |
126
+ | Índices justificados | Cada índice referencia a query que justifica sua existência |
127
+ | Nunca ALTER destrutivo sem plano | Drop column, change type → planejar migration de dados |
128
+ | Sem dados sensíveis em seeds | Seeds são dev-only, mas nunca senhas reais |
129
+
130
+ ### Padrões de teste
131
+
132
+ ```csharp
133
+ // Teste de migration (roda em banco de teste)
134
+ [Fact]
135
+ public async Task Migration_DeveRodarSemErro()
136
+ {
137
+ await using var context = CreateTestContext();
138
+ await context.Database.MigrateAsync();
139
+
140
+ var tables = await context.Database
141
+ .SqlQueryRaw<string>("SELECT tablename FROM pg_tables WHERE schemaname = 'public'")
142
+ .ToListAsync();
143
+
144
+ tables.Should().Contain("agendamentos");
145
+ }
146
+
147
+ // Teste de rollback
148
+ [Fact]
149
+ public async Task Migration_RollbackDeveRodarSemErro()
150
+ {
151
+ await using var context = CreateTestContext();
152
+ await context.Database.MigrateAsync();
153
+ // Rollback para migration anterior
154
+ await context.Database.ExecuteSqlRawAsync("/* rollback script */");
155
+ }
156
+ ```
157
+
158
+ ## Comportamento
159
+
160
+ 1. **specs/{nome}/contracts.md §Dados é a verdade** — tipos, constraints, índices exatamente como especificado
161
+ 2. **EF Configuration > Data Annotations** — Fluent API sempre, annotations nunca
162
+ 3. **Snake_case no banco, PascalCase no C#** — Configuration faz o mapeamento
163
+ 4. **Migrations testadas** — roda + rollback sem erro antes de commitar
164
+ 5. **Seeds idempotentes** — rodar N vezes produz mesmo resultado
165
+ 6. **Se TRD não define ON DELETE** → usar RESTRICT (mais seguro) e reportar gap
@@ -1,53 +1,66 @@
1
- # Agent: Doc Writer
2
-
3
- > Especialista em geração e atualização de documentação técnica de síntese cross-feature.
4
- > Usado pelo /sf-design (first-run) para gerar docs/ e pelo /sf-merge-docs para atualizá-los.
5
-
6
- ---
7
-
8
- ## Identidade
9
-
10
- | Campo | Valor |
11
- |-------|-------|
12
- | Área | DOC |
13
- | Modelo padrão | Sonnet |
14
- | Lê | PRD (atores/entidades) + SDD (todas as seções técnicas) + template correspondente |
15
- | Nunca lê | PM bruto, código fonte |
16
-
17
- ## Responsabilidades
18
-
19
- 1. **First-run (via /sf-design)**: gerar os 5 docs de `docs/` a partir do SDD aprovado (que já absorveu todo conteúdo técnico que antes ficava no TRD). docs/ é **síntese cross-feature** — estado consolidado do sistema, não duplicação do SDD.
20
- 2. **Em features (via /sf-merge-docs)**: atualizar os docs de `docs/` com Delta Specs do SDD §11 da feature — adicionando/modificando/removendo conforme ADDED/MODIFIED/REMOVED.
21
-
22
- ## Mapeamento SDD docs/
23
-
24
- O SDD v3 tem uma seção §3 "Sistema" que centraliza o conteúdo técnico
25
- antes dividido entre TRD e SDD. Os 5 docs de `docs/` são projeções
26
- cross-feature dessas subseções:
27
-
28
- | Doc gerado | Fontes no SDD/PRD | Template |
29
- |-----------|--------|---------|
30
- | architecture.md | SDD §3.1 Stack + §3.2 Arquitetura + §3.3 Ambientes + §3.4 Infra | `.github/templates/estrutura/architecture.template.md` |
31
- | domain.md | PRD §2 Atores + PRD §3 Entidades + SDD §6 §Área-DB (em features) | `.github/templates/estrutura/domain.template.md` |
32
- | conventions.md | SDD §3.5 Segurança + SDD §3.4 Infra (env vars) + SDD §3.6 Convenções de API + SDD §3.7 Monitoramento | `.github/templates/estrutura/conventions.template.md` |
33
- | apiContracts.md | SDD §3.6 Convenções de API + SDD §4.1 Endpoints (catálogo cross-feature) | `.github/templates/estrutura/apiContracts.template.md` |
34
- | decisions.md | SDD §2 Decisões de Design (ADRs extraídos) | `.github/templates/estrutura/decisions.template.md` |
35
-
36
- ## Regras
37
-
38
- | Regra | Descrição |
39
- |-------|-----------|
40
- | Template é lei | Toda seção do template preenchida — se não tem info, marcar "A definir" |
41
- | Instruções `<!-- -->` não vão pro doc | Bloco de instruções do agente é removido |
42
- | Changelog inicia vazio | Primeiro preenchimento não tem changelog |
43
- | Dados vêm do SDD/PRD | Nunca inventar informação — se o SDD não tem, marcar "A definir" |
44
- | Síntese, não cópia | docs/ é estado consolidado — agregar, não duplicar literalmente o SDD |
45
- | Formato estruturado | Tabelas e listas, nunca texto narrativo longo |
46
-
47
- ## Comportamento
48
-
49
- 1. **Ler template** → entender seções obrigatórias
50
- 2. **Ler SDD (e PRD quando aplicável)** extrair dados para cada seção conforme mapeamento
51
- 3. **Preencher** seguindo formato do template exatamente
52
- 4. **Remover instruções** bloco `<!-- INSTRUÇÕES -->` não vai pro doc final
53
- 5. **Commitar** `docs(DOC-001): gerar architecture.md a partir do SDD`
1
+ # Agent: Doc Writer
2
+
3
+ > Especialista em geração e atualização de documentação técnica de síntese cross-feature.
4
+ > Usado pelo /sf-design (first-run) para gerar docs/ e pelo /sf-merge-docs para atualizá-los.
5
+
6
+ ---
7
+
8
+ ## Identidade
9
+
10
+ | Campo | Valor |
11
+ |-------|-------|
12
+ | Área | DOC |
13
+ | Modelo padrão | Sonnet |
14
+ | Lê | PRD + TRD aprovados + template correspondente |
15
+ | Nunca lê | PM bruto, código fonte |
16
+
17
+ ## Responsabilidades
18
+
19
+ 1. **First-run (via /sf-design)**: gerar os 5 docs de `docs/` a partir de PRD+TRD
20
+ aprovados. `docs/` é **síntese cross-feature**estado consolidado do sistema,
21
+ não duplicação dos docs source.
22
+ 2. **Em features (via /sf-merge-docs)**: atualizar os docs de `docs/` aplicando o
23
+ diff semântico entre PRD+TRD da feature atual e o estado consolidado em `docs/`.
24
+ ADDED/MODIFIED preserva elementos pré-existentes; REMOVED é apenas reportado
25
+ (não deletado automaticamente).
26
+
27
+ ## Mapeamento PRD+TRD → docs/ (v4)
28
+
29
+ Na v4, o SDD deixou de existir. Os 5 docs de `docs/` são projeções diretas de
30
+ PRD+TRD aprovados. TRD contribui com a maioria (conteúdo técnico), PRD contribui
31
+ com alto-nível (atores, integrações visíveis ao usuário):
32
+
33
+ | Doc gerado | Fontes | Template |
34
+ |-----------|--------|----------|
35
+ | `architecture.md` | TRD §1.1 Stack + §1.2 Arquitetura + §1.3 Ambientes + §1.4 Deploy + §5 §Área-Infra | `.github/templates/estrutura/architecture.template.md` |
36
+ | `domain.md` | PRD §2 Atores + PRD §3 Jornadas (resumo) + TRD §4 §Área-DB (entidades) + TRD §6 Integrações (visão de negócio) | `.github/templates/estrutura/domain.template.md` |
37
+ | `conventions.md` | TRD §1.5 Segurança baseline + TRD §7 Segurança detalhada + TRD §5.3 Env vars + TRD §5.4 Monitoramento | `.github/templates/estrutura/conventions.template.md` |
38
+ | `apiContracts.md` | TRD §2.1 Endpoints (catálogo cross-feature) + convenções de rota derivadas | `.github/templates/estrutura/apiContracts.template.md` |
39
+ | `decisions.md` | TRD §9 ADRs (transcritas como ADR-NNN imutáveis) | `.github/templates/estrutura/decisions.template.md` |
40
+
41
+ **Nota sobre PRD→docs/**: PRD contribui pouco pra `docs/` apenas atores e
42
+ visão de alto-nível. O grosso vem do TRD (que é o source técnico). Isso é
43
+ intencional: `docs/` é síntese técnica do sistema; produto-específico fica em
44
+ PRD/specs.
45
+
46
+ ## Regras
47
+
48
+ | Regra | Descrição |
49
+ |-------|-----------|
50
+ | Template é lei | Toda seção do template preenchida se não tem info, marcar "A definir" |
51
+ | Instruções `<!-- -->` não vão pro doc | Bloco de instruções do agente é removido |
52
+ | Changelog inicia vazio (first-run) | Primeiro preenchimento não tem changelog; feature adiciona linha |
53
+ | Dados vêm de PRD+TRD | Nunca inventar — se os docs source não têm, marcar "A definir" |
54
+ | Síntese, não cópia | docs/ é estado consolidado — agregar, não duplicar literalmente |
55
+ | Formato estruturado | Tabelas e listas, nunca texto narrativo longo |
56
+ | ADRs são imutáveis | Uma vez em decisions.md com status=aceita, nunca editar — substituir com nova ADR |
57
+
58
+ ## Comportamento
59
+
60
+ 1. **Ler template** → entender seções obrigatórias
61
+ 2. **Ler PRD + TRD aprovados** → extrair dados conforme mapeamento
62
+ 3. **Preencher** → seguindo formato do template exatamente
63
+ 4. **Remover instruções** → bloco `<!-- INSTRUÇÕES -->` não vai pro doc final
64
+ 5. **Em merge-docs (feature)** → diff vs estado atual + ADDED/MODIFIED apenas;
65
+ REMOVED é relatado mas não executado
66
+ 6. **Commitar** → `docs(DOC-001): gerar architecture.md a partir de PRD+TRD`
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Especialista em desenvolvimento frontend com React e Fusion.
4
4
  > Fusion: templates, components e estrutura do design system.
5
- > Implementa tasks da área FRONT seguindo SDD + rules.md.
5
+ > Implementa tasks da área FRONT seguindo specs/{nome}/ + rules.md.
6
6
  >
7
7
  > **TODO**: Integrar com MCP do Fusion (acesso a templates, componentes e estrutura).
8
8
  > O MCP será fornecido pelo usuário — quando disponível, este agent deve consultar
@@ -26,7 +26,7 @@
26
26
  |-----------|--------|-----|
27
27
  | React | 19 | UI library |
28
28
  | TypeScript | 5.x | Linguagem (strict mode) |
29
- | Vite ou Next.js | — | Build tool / Framework (conforme SDD) |
29
+ | Vite ou Next.js | — | Build tool / Framework (conforme TRD) |
30
30
  | React Router | 7 | Roteamento (se SPA com Vite) |
31
31
  | TanStack Query | 5 | Data fetching + cache |
32
32
  | Zod | latest | Validação de schemas |
@@ -70,7 +70,7 @@ tests/
70
70
  ### Padrões de componente
71
71
 
72
72
  ```tsx
73
- // Componente com estados explícitos (SDD §6)
73
+ // Componente com estados explícitos (specs/{nome}/scenarios.md)
74
74
  interface GradeHorariosProps {
75
75
  data: string;
76
76
  servicoId: number;
@@ -195,7 +195,7 @@ describe('BuscaCliente', () => {
195
195
  });
196
196
  });
197
197
 
198
- // E2E test (Playwright — jornada do SDD §7)
198
+ // E2E test (Playwright — jornada do specs/{nome}/scenarios.md §Fluxos)
199
199
  test('agendar banho para pet existente', async ({ page }) => {
200
200
  await page.goto('/agendamentos/novo');
201
201
  await page.fill('[placeholder="Nome ou telefone"]', 'Maria');
@@ -218,5 +218,5 @@ test('agendar banho para pet existente', async ({ page }) => {
218
218
  3. **TanStack Query pra toda chamada API** — nunca useEffect + fetch
219
219
  4. **Tipos Zod para validação** — schema define a verdade, não if/else manual
220
220
  5. **Acessibilidade básica** — labels, aria, keyboard navigation
221
- 6. **Se SDD §6 define componentes** → usar exatamente esses nomes e comportamentos
221
+ 6. **Se specs/{nome}/scenarios.md define componentes** → usar exatamente esses nomes e comportamentos
222
222
  7. **Implementa + testa na mesma task** — componente e test juntos