@maestro-ai/mcp-server 5.5.3 → 5.6.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 (150) hide show
  1. package/dist/constants.d.ts +1 -1
  2. package/dist/constants.js +1 -1
  3. package/dist/errors/index.js +2 -2
  4. package/dist/errors/index.js.map +1 -1
  5. package/dist/flows/onboarding-orchestrator.js +1 -1
  6. package/dist/flows/onboarding-orchestrator.js.map +1 -1
  7. package/dist/handlers/field-normalizer.d.ts +31 -0
  8. package/dist/handlers/field-normalizer.d.ts.map +1 -0
  9. package/dist/handlers/field-normalizer.js +70 -0
  10. package/dist/handlers/field-normalizer.js.map +1 -0
  11. package/dist/handlers/prd-scorer.d.ts +60 -0
  12. package/dist/handlers/prd-scorer.d.ts.map +1 -0
  13. package/dist/handlers/prd-scorer.js +157 -0
  14. package/dist/handlers/prd-scorer.js.map +1 -0
  15. package/dist/handlers/prototype-phase-handler.js.map +1 -1
  16. package/dist/handlers/shared-prompt-handler.js.map +1 -1
  17. package/dist/handlers/specialist-formatters.d.ts +42 -0
  18. package/dist/handlers/specialist-formatters.d.ts.map +1 -0
  19. package/dist/handlers/specialist-formatters.js +272 -0
  20. package/dist/handlers/specialist-formatters.js.map +1 -0
  21. package/dist/handlers/specialist-phase-handler.d.ts +1 -10
  22. package/dist/handlers/specialist-phase-handler.d.ts.map +1 -1
  23. package/dist/handlers/specialist-phase-handler.js +11 -501
  24. package/dist/handlers/specialist-phase-handler.js.map +1 -1
  25. package/dist/legacy-tools.d.ts +21 -0
  26. package/dist/legacy-tools.d.ts.map +1 -0
  27. package/dist/legacy-tools.js +377 -0
  28. package/dist/legacy-tools.js.map +1 -0
  29. package/dist/router.d.ts +2 -2
  30. package/dist/router.d.ts.map +1 -1
  31. package/dist/router.js +6 -378
  32. package/dist/router.js.map +1 -1
  33. package/dist/server.d.ts +18 -4
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +70 -1
  36. package/dist/server.js.map +1 -1
  37. package/dist/services/flow-engine.d.ts.map +1 -1
  38. package/dist/services/flow-engine.js +1 -2
  39. package/dist/services/flow-engine.js.map +1 -1
  40. package/dist/services/onboarding.service.js.map +1 -1
  41. package/dist/services/scoring-config.d.ts +47 -0
  42. package/dist/services/scoring-config.d.ts.map +1 -0
  43. package/dist/services/scoring-config.js +88 -0
  44. package/dist/services/scoring-config.js.map +1 -0
  45. package/dist/services/state.service.d.ts.map +1 -1
  46. package/dist/services/state.service.js +3 -9
  47. package/dist/services/state.service.js.map +1 -1
  48. package/dist/services/static-validator.service.d.ts +28 -0
  49. package/dist/services/static-validator.service.d.ts.map +1 -0
  50. package/dist/services/static-validator.service.js +55 -0
  51. package/dist/services/static-validator.service.js.map +1 -0
  52. package/dist/services/task-decomposer.service.d.ts +59 -0
  53. package/dist/services/task-decomposer.service.d.ts.map +1 -0
  54. package/dist/services/task-decomposer.service.js +162 -0
  55. package/dist/services/task-decomposer.service.js.map +1 -0
  56. package/dist/services/test-stub-generator.service.d.ts +32 -0
  57. package/dist/services/test-stub-generator.service.d.ts.map +1 -0
  58. package/dist/services/test-stub-generator.service.js +71 -0
  59. package/dist/services/test-stub-generator.service.js.map +1 -0
  60. package/dist/stdio.js +7 -71
  61. package/dist/stdio.js.map +1 -1
  62. package/dist/tools/brainstorm.js.map +1 -1
  63. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  64. package/dist/tools/consolidated/avancar.js +27 -19
  65. package/dist/tools/consolidated/avancar.js.map +1 -1
  66. package/dist/tools/discovery.js.map +1 -1
  67. package/dist/tools/iniciar-projeto.js.map +1 -1
  68. package/dist/tools/maestro-tool.d.ts.map +1 -1
  69. package/dist/tools/maestro-tool.js +23 -14
  70. package/dist/tools/maestro-tool.js.map +1 -1
  71. package/dist/tools/next-steps-dashboard.js.map +1 -1
  72. package/dist/tools/prd-writer.js.map +1 -1
  73. package/dist/tools/proximo.d.ts.map +1 -1
  74. package/dist/tools/proximo.js +26 -6
  75. package/dist/tools/proximo.js.map +1 -1
  76. package/dist/types/index.d.ts +1 -1
  77. package/dist/types/index.d.ts.map +1 -1
  78. package/package.json +3 -2
  79. package/dist/gates/tiers.test.d.ts +0 -2
  80. package/dist/gates/tiers.test.d.ts.map +0 -1
  81. package/dist/gates/tiers.test.js +0 -86
  82. package/dist/gates/tiers.test.js.map +0 -1
  83. package/dist/index.d.ts +0 -3
  84. package/dist/index.d.ts.map +0 -1
  85. package/dist/index.js +0 -343
  86. package/dist/index.js.map +0 -1
  87. package/dist/tests/aprovar-gate.test.d.ts +0 -2
  88. package/dist/tests/aprovar-gate.test.d.ts.map +0 -1
  89. package/dist/tests/aprovar-gate.test.js +0 -113
  90. package/dist/tests/aprovar-gate.test.js.map +0 -1
  91. package/dist/tests/brainstorm-prd.test.d.ts +0 -5
  92. package/dist/tests/brainstorm-prd.test.d.ts.map +0 -1
  93. package/dist/tests/brainstorm-prd.test.js +0 -291
  94. package/dist/tests/brainstorm-prd.test.js.map +0 -1
  95. package/dist/tests/classificacao-progressiva.test.d.ts +0 -5
  96. package/dist/tests/classificacao-progressiva.test.d.ts.map +0 -1
  97. package/dist/tests/classificacao-progressiva.test.js +0 -372
  98. package/dist/tests/classificacao-progressiva.test.js.map +0 -1
  99. package/dist/tests/content-resolver.test.d.ts +0 -5
  100. package/dist/tests/content-resolver.test.d.ts.map +0 -1
  101. package/dist/tests/content-resolver.test.js +0 -157
  102. package/dist/tests/content-resolver.test.js.map +0 -1
  103. package/dist/tests/deliverable-validator.test.d.ts +0 -12
  104. package/dist/tests/deliverable-validator.test.d.ts.map +0 -1
  105. package/dist/tests/deliverable-validator.test.js +0 -214
  106. package/dist/tests/deliverable-validator.test.js.map +0 -1
  107. package/dist/tests/flow-engine.test.d.ts +0 -2
  108. package/dist/tests/flow-engine.test.d.ts.map +0 -1
  109. package/dist/tests/flow-engine.test.js +0 -85
  110. package/dist/tests/flow-engine.test.js.map +0 -1
  111. package/dist/tests/gate-orientation.test.d.ts +0 -2
  112. package/dist/tests/gate-orientation.test.d.ts.map +0 -1
  113. package/dist/tests/gate-orientation.test.js +0 -59
  114. package/dist/tests/gate-orientation.test.js.map +0 -1
  115. package/dist/tests/middleware.test.d.ts +0 -5
  116. package/dist/tests/middleware.test.d.ts.map +0 -1
  117. package/dist/tests/middleware.test.js +0 -254
  118. package/dist/tests/middleware.test.js.map +0 -1
  119. package/dist/tests/migracao-skills.test.d.ts +0 -2
  120. package/dist/tests/migracao-skills.test.d.ts.map +0 -1
  121. package/dist/tests/migracao-skills.test.js +0 -208
  122. package/dist/tests/migracao-skills.test.js.map +0 -1
  123. package/dist/tests/onboarding-flow.test.d.ts +0 -5
  124. package/dist/tests/onboarding-flow.test.d.ts.map +0 -1
  125. package/dist/tests/onboarding-flow.test.js +0 -231
  126. package/dist/tests/onboarding-flow.test.js.map +0 -1
  127. package/dist/tests/prd-validation.test.d.ts +0 -6
  128. package/dist/tests/prd-validation.test.d.ts.map +0 -1
  129. package/dist/tests/prd-validation.test.js +0 -164
  130. package/dist/tests/prd-validation.test.js.map +0 -1
  131. package/dist/tests/readiness-dashboard.test.d.ts +0 -5
  132. package/dist/tests/readiness-dashboard.test.d.ts.map +0 -1
  133. package/dist/tests/readiness-dashboard.test.js +0 -252
  134. package/dist/tests/readiness-dashboard.test.js.map +0 -1
  135. package/dist/tests/skill-loader.test.d.ts +0 -5
  136. package/dist/tests/skill-loader.test.d.ts.map +0 -1
  137. package/dist/tests/skill-loader.test.js +0 -244
  138. package/dist/tests/skill-loader.test.js.map +0 -1
  139. package/dist/tests/v52-integration.test.d.ts +0 -14
  140. package/dist/tests/v52-integration.test.d.ts.map +0 -1
  141. package/dist/tests/v52-integration.test.js +0 -225
  142. package/dist/tests/v52-integration.test.js.map +0 -1
  143. package/dist/tests/watcher.service.test.d.ts +0 -2
  144. package/dist/tests/watcher.service.test.d.ts.map +0 -1
  145. package/dist/tests/watcher.service.test.js +0 -119
  146. package/dist/tests/watcher.service.test.js.map +0 -1
  147. package/dist/utils/__tests__/prompt-mapper.test.d.ts +0 -2
  148. package/dist/utils/__tests__/prompt-mapper.test.d.ts.map +0 -1
  149. package/dist/utils/__tests__/prompt-mapper.test.js +0 -184
  150. package/dist/utils/__tests__/prompt-mapper.test.js.map +0 -1
@@ -1,231 +0,0 @@
1
- /**
2
- * Testes para o fluxo de onboarding otimizado
3
- */
4
- import { describe, it, expect, beforeEach } from 'vitest';
5
- import { gerarBlocosDiscovery, calcularProgressoDiscovery, validarBlocoCompleto, extrairRespostasDiscovery, gerarResumoDiscovery, } from '../utils/discovery-adapter.js';
6
- describe('Discovery Adapter', () => {
7
- describe('gerarBlocosDiscovery', () => {
8
- it('deve gerar blocos básicos para modo economy', () => {
9
- const blocos = gerarBlocosDiscovery({
10
- mode: 'economy',
11
- skipCompletedBlocks: false,
12
- prioritizeByMode: true,
13
- allowBatchInput: true,
14
- });
15
- expect(blocos.length).toBe(3); // projeto-basico, escopo-mvp, tecnico
16
- expect(blocos[0].id).toBe('projeto-basico');
17
- expect(blocos[0].required).toBe(true);
18
- });
19
- it('deve gerar mais blocos para modo balanced', () => {
20
- const blocos = gerarBlocosDiscovery({
21
- mode: 'balanced',
22
- skipCompletedBlocks: false,
23
- prioritizeByMode: true,
24
- allowBatchInput: true,
25
- });
26
- expect(blocos.length).toBe(5); // adiciona time-infraestrutura e requisitos-criticos
27
- expect(blocos.some((b) => b.id === 'time-infraestrutura')).toBe(true);
28
- });
29
- it('deve gerar todos os blocos para modo quality', () => {
30
- const blocos = gerarBlocosDiscovery({
31
- mode: 'quality',
32
- skipCompletedBlocks: false,
33
- prioritizeByMode: true,
34
- allowBatchInput: true,
35
- });
36
- expect(blocos.length).toBe(8); // adiciona dados-analytics, ux-design, orcamento-restricoes
37
- expect(blocos.some((b) => b.id === 'dados-analytics')).toBe(true);
38
- expect(blocos.some((b) => b.id === 'ux-design')).toBe(true);
39
- expect(blocos.some((b) => b.id === 'orcamento-restricoes')).toBe(true);
40
- });
41
- it('deve pré-preencher campos com dados existentes', () => {
42
- const blocos = gerarBlocosDiscovery({
43
- mode: 'economy',
44
- skipCompletedBlocks: false,
45
- prioritizeByMode: true,
46
- allowBatchInput: true,
47
- existingData: {
48
- nome_projeto: 'PulseTrack',
49
- problema: 'Monitorar saúde ocupacional',
50
- },
51
- });
52
- const blocoBasico = blocos[0];
53
- const nomeField = blocoBasico.fields.find((f) => f.id === 'nome_projeto');
54
- const problemaField = blocoBasico.fields.find((f) => f.id === 'problema');
55
- expect(nomeField?.value).toBe('PulseTrack');
56
- expect(nomeField?.filled).toBe(true);
57
- expect(problemaField?.value).toBe('Monitorar saúde ocupacional');
58
- expect(problemaField?.filled).toBe(true);
59
- });
60
- });
61
- describe('calcularProgressoDiscovery', () => {
62
- it('deve calcular progresso corretamente', () => {
63
- const blocos = gerarBlocosDiscovery({
64
- mode: 'economy',
65
- skipCompletedBlocks: false,
66
- prioritizeByMode: true,
67
- allowBatchInput: true,
68
- });
69
- // Marcar primeiro bloco como completo
70
- blocos[0].status = 'completed';
71
- const progresso = calcularProgressoDiscovery(blocos);
72
- expect(progresso.completados).toBe(1);
73
- expect(progresso.total).toBe(3);
74
- expect(progresso.percentual).toBe(33);
75
- expect(progresso.proximoBloco?.id).toBe('escopo-mvp');
76
- });
77
- it('deve retornar undefined para proximoBloco quando todos estão completos', () => {
78
- const blocos = gerarBlocosDiscovery({
79
- mode: 'economy',
80
- skipCompletedBlocks: false,
81
- prioritizeByMode: true,
82
- allowBatchInput: true,
83
- });
84
- blocos.forEach((b) => (b.status = 'completed'));
85
- const progresso = calcularProgressoDiscovery(blocos);
86
- expect(progresso.completados).toBe(3);
87
- expect(progresso.percentual).toBe(100);
88
- expect(progresso.proximoBloco).toBeUndefined();
89
- });
90
- });
91
- describe('validarBlocoCompleto', () => {
92
- it('deve validar bloco com todos os campos obrigatórios preenchidos', () => {
93
- const blocos = gerarBlocosDiscovery({
94
- mode: 'economy',
95
- skipCompletedBlocks: false,
96
- prioritizeByMode: true,
97
- allowBatchInput: true,
98
- });
99
- const bloco = blocos[0];
100
- bloco.fields.forEach((f) => {
101
- if (f.required) {
102
- f.filled = true;
103
- f.value = 'valor_teste';
104
- }
105
- });
106
- const validacao = validarBlocoCompleto(bloco);
107
- expect(validacao.valido).toBe(true);
108
- expect(validacao.camposFaltantes.length).toBe(0);
109
- });
110
- it('deve detectar campos obrigatórios faltando', () => {
111
- const blocos = gerarBlocosDiscovery({
112
- mode: 'economy',
113
- skipCompletedBlocks: false,
114
- prioritizeByMode: true,
115
- allowBatchInput: true,
116
- });
117
- const bloco = blocos[0];
118
- // Não preencher nenhum campo
119
- const validacao = validarBlocoCompleto(bloco);
120
- expect(validacao.valido).toBe(false);
121
- expect(validacao.camposFaltantes.length).toBeGreaterThan(0);
122
- expect(validacao.camposFaltantes).toContain('Nome do projeto');
123
- });
124
- });
125
- describe('extrairRespostasDiscovery', () => {
126
- it('deve extrair respostas dos blocos preenchidos', () => {
127
- const blocos = gerarBlocosDiscovery({
128
- mode: 'economy',
129
- skipCompletedBlocks: false,
130
- prioritizeByMode: true,
131
- allowBatchInput: true,
132
- });
133
- blocos[0].fields[0].filled = true;
134
- blocos[0].fields[0].value = 'PulseTrack';
135
- blocos[0].fields[1].filled = true;
136
- blocos[0].fields[1].value = 'Monitorar saúde ocupacional';
137
- const respostas = extrairRespostasDiscovery(blocos);
138
- expect(respostas.nome_projeto).toBe('PulseTrack');
139
- expect(respostas.problema).toBe('Monitorar saúde ocupacional');
140
- });
141
- it('deve ignorar campos não preenchidos', () => {
142
- const blocos = gerarBlocosDiscovery({
143
- mode: 'economy',
144
- skipCompletedBlocks: false,
145
- prioritizeByMode: true,
146
- allowBatchInput: true,
147
- });
148
- blocos[0].fields[0].filled = true;
149
- blocos[0].fields[0].value = 'PulseTrack';
150
- // Não preencher o segundo campo
151
- const respostas = extrairRespostasDiscovery(blocos);
152
- expect(respostas.nome_projeto).toBe('PulseTrack');
153
- expect(respostas.problema).toBeUndefined();
154
- });
155
- });
156
- describe('gerarResumoDiscovery', () => {
157
- it('deve gerar resumo formatado com respostas', () => {
158
- const respostas = {
159
- nome_projeto: 'PulseTrack',
160
- problema: 'Monitorar saúde ocupacional',
161
- publico_alvo: 'Empresas e profissionais de saúde',
162
- funcionalidades_principais: ['Dashboard', 'Alertas', 'Relatórios'],
163
- plataformas: ['Web', 'Mobile'],
164
- cronograma: '6 meses',
165
- stack_preferida: 'React + Node.js',
166
- };
167
- const resumo = gerarResumoDiscovery(respostas);
168
- expect(resumo).toContain('PulseTrack');
169
- expect(resumo).toContain('Monitorar saúde ocupacional');
170
- expect(resumo).toContain('Dashboard, Alertas, Relatórios');
171
- expect(resumo).toContain('Web, Mobile');
172
- expect(resumo).toContain('React + Node.js');
173
- });
174
- it('deve gerar resumo mesmo com respostas parciais', () => {
175
- const respostas = {
176
- nome_projeto: 'PulseTrack',
177
- problema: 'Monitorar saúde ocupacional',
178
- };
179
- const resumo = gerarResumoDiscovery(respostas);
180
- expect(resumo).toContain('PulseTrack');
181
- expect(resumo).toContain('Monitorar saúde ocupacional');
182
- expect(resumo.length).toBeGreaterThan(0);
183
- });
184
- });
185
- });
186
- describe('OnboardingState', () => {
187
- let onboarding;
188
- beforeEach(() => {
189
- onboarding = {
190
- projectId: 'test-project-123',
191
- phase: 'discovery',
192
- discoveryStatus: 'in_progress',
193
- discoveryBlocks: gerarBlocosDiscovery({
194
- mode: 'balanced',
195
- skipCompletedBlocks: false,
196
- prioritizeByMode: true,
197
- allowBatchInput: true,
198
- }),
199
- discoveryResponses: {},
200
- brainstormStatus: 'pending',
201
- brainstormSections: [],
202
- prdStatus: 'pending',
203
- prdScore: 0,
204
- mode: 'balanced',
205
- totalInteractions: 0,
206
- };
207
- });
208
- it('deve inicializar com estado correto', () => {
209
- expect(onboarding.phase).toBe('discovery');
210
- expect(onboarding.discoveryStatus).toBe('in_progress');
211
- expect(onboarding.discoveryBlocks.length).toBe(5);
212
- expect(onboarding.totalInteractions).toBe(0);
213
- });
214
- it('deve rastrear progresso do discovery', () => {
215
- onboarding.discoveryBlocks[0].status = 'completed';
216
- onboarding.totalInteractions++;
217
- const progresso = calcularProgressoDiscovery(onboarding.discoveryBlocks);
218
- expect(progresso.completados).toBe(1);
219
- expect(onboarding.totalInteractions).toBe(1);
220
- });
221
- it('deve marcar discovery como completo quando todos os blocos obrigatórios estão completos', () => {
222
- onboarding.discoveryBlocks
223
- .filter((b) => b.required)
224
- .forEach((b) => (b.status = 'completed'));
225
- const todosObrigatoriosCompletos = onboarding.discoveryBlocks
226
- .filter((b) => b.required)
227
- .every((b) => b.status === 'completed');
228
- expect(todosObrigatoriosCompletos).toBe(true);
229
- });
230
- });
231
- //# sourceMappingURL=onboarding-flow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onboarding-flow.test.js","sourceRoot":"","sources":["../../src/tests/onboarding-flow.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Testes de validação do PRD — verifica que PRDs reais passam nos 3 validadores
3
- * Criado para garantir que regex/keywords expandidas funcionam corretamente.
4
- */
5
- export {};
6
- //# sourceMappingURL=prd-validation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd-validation.test.d.ts","sourceRoot":"","sources":["../../src/tests/prd-validation.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,164 +0,0 @@
1
- /**
2
- * Testes de validação do PRD — verifica que PRDs reais passam nos 3 validadores
3
- * Criado para garantir que regex/keywords expandidas funcionam corretamente.
4
- */
5
- import { describe, it, expect } from 'vitest';
6
- import { validarEstrutura } from '../gates/estrutura.js';
7
- import { validarGate } from '../gates/validator.js';
8
- // PRD real do SubsTrack (caso de teste que falhava com score 67/100)
9
- const PRD_SUBSTRACK = `# SubsTrack - PRD Completo e Evoluído
10
-
11
- ## PROBLEMA
12
- Fadiga de assinaturas: pessoas perdem dinheiro com serviços não utilizados, esquecem períodos de teste e não visualizam impacto total dos gastos recorrentes no orçamento mensal. Causa raiz: proliferação de modelos de assinatura e falta de ferramentas centralizadas.
13
-
14
- ## USUÁRIOS/PERSONAS
15
- **Ana Silva (B2C)**: 32 anos, profissional de marketing, 8+ assinaturas (streaming, fitness, produtividade). Objetivo: controlar gastos e evitar surpresas. Dores: esquece cancelamentos, perde dinheiro.
16
-
17
- **Carlos Oliveira (B2B)**: 28 anos, freelancer designer, 5+ ferramentas SaaS. Objetivo: otimizar custos operacionais com orçamento apertado. Dores: perde controle dos custos SaaS.
18
-
19
- ## FUNCIONALIDADES/MVP
20
- 1. **Varredura Automática**: Integração com e-mail/Open Banking para identificar cobranças recorrentes
21
- 2. **Alertas de Renovação**: Notificação 3 dias antes de cobranças/fim de testes gratuitos
22
- 3. **Cancelamento em Um Clique**: Automatização via IA agents ou e-mails jurídicos automáticos
23
- 4. **Dashboard de Gastos**: Visualização clara do "Custo de Vida Digital" mensal/anual
24
-
25
- ## MÉTRICAS DE SUCESSO
26
- **North Star**: Economia Média por Usuário (valor em R$ economizado nos primeiros 90 dias, meta: R$50)
27
-
28
- **KPIs Secundários**:
29
- - Taxa de ativação: 60% em 7 dias
30
- - Assinaturas identificadas: 8+ por usuário
31
- - Retenção mensal: 85%
32
- - NPS: 50+
33
- - LTV: R$240 (12 meses x R$19,90)
34
- - CAC: R$50 (marketing digital)
35
- - Payback: 3 meses
36
- - Churn Rate: <5% mensal
37
-
38
- ## STAKEHOLDERS
39
- - Sponsor: João Silva (CEO, ex-nubank, 10 anos fintech)
40
- - Product Manager: Maria Santos (ex-picpay, specialist em produtos financeiros)
41
- - Tech Lead: Pedro Costa (8 anos experiência em Open Banking e IA)
42
- - Design Lead: Ana Lima (UX sênior, especialista em produtos financeiros)
43
-
44
- ## ANÁLISE COMPETITIVA
45
- | Concorrente | Modelo | Diferencial | Fraqueza |
46
- |-------------|--------|-------------|----------|
47
- | Mobills | Controle financeiro | Controle completo | Sem cancelamento automatizado |
48
- | Organizze | Planejamento | Educação financeira | Manual, sem IA |
49
- | GuiaBolso | Agregador | Conexão bancária | Foco em controle, não em cancelamento |
50
-
51
- **Posicionamento**: Único com Auto-Pilot de Cancelamento via IA e especialização em recorrência
52
-
53
- ## TIMELINE MVP
54
- 10 semanas: 4 semanas integração APIs, 4 semanas interface/alertas, 2 semanas beta fechado com 50 usuários.
55
-
56
- ## PLANO DE APRENDIZADO
57
- - **Experimento 1**: Beta fechado 50 usuários, >95% precisão identificação, 2 semanas
58
- - **Experimento 2**: Teste A/B cancelamento (100 usuários), >60% taxa cancelamento automatizado vs 20% manual, 2 semanas`;
59
- const fasePRD = {
60
- numero: 1,
61
- nome: "Produto",
62
- especialista: "Gestor de Produto",
63
- template: "PRD.md",
64
- entregavel_esperado: "PRD",
65
- gate_checklist: [
66
- "Problema claramente definido",
67
- "Personas ou usuários identificados",
68
- "Funcionalidades MVP listadas",
69
- "Métricas de sucesso definidas",
70
- ],
71
- };
72
- describe('Validação do PRD — estrutura.ts', () => {
73
- it('deve encontrar 4/4 seções obrigatórias no PRD do SubsTrack', () => {
74
- const result = validarEstrutura(1, PRD_SUBSTRACK, 'base');
75
- expect(result.secoes_encontradas).toHaveLength(4);
76
- expect(result.secoes_faltando).toHaveLength(0);
77
- expect(result.valido).toBe(true);
78
- expect(result.score).toBeGreaterThanOrEqual(80);
79
- });
80
- it('deve aceitar headers com ### (h3)', () => {
81
- const prd = `### Problema\nDescrição do problema aqui.\n\n### Usuários\nDescrição dos usuários.\n\n### MVP\nFuncionalidades do MVP.\n\n### Métricas\nMétricas de sucesso.`;
82
- const result = validarEstrutura(1, prd, 'base');
83
- expect(result.secoes_encontradas.length).toBeGreaterThanOrEqual(3);
84
- });
85
- it('deve aceitar headers numerados (## 1. Problema)', () => {
86
- const prd = `## 1. Problema\nDescrição.\n\n## 2. Personas\nDescrição.\n\n## 3. Funcionalidades\nDescrição.\n\n## 4. Métricas\nDescrição.`;
87
- const result = validarEstrutura(1, prd, 'base');
88
- expect(result.secoes_encontradas.length).toBeGreaterThanOrEqual(3);
89
- });
90
- it('deve aceitar variações com acento (USUÁRIOS, MÉTRICAS)', () => {
91
- const prd = `## PROBLEMA\nDescrição.\n\n## USUÁRIOS\nDescrição.\n\n## FUNCIONALIDADES\nDescrição.\n\n## MÉTRICAS DE SUCESSO\nDescrição.`;
92
- const result = validarEstrutura(1, prd, 'base');
93
- expect(result.secoes_encontradas).toHaveLength(4);
94
- });
95
- it('deve aceitar "USUÁRIOS/PERSONAS" com barra', () => {
96
- const prd = `## PROBLEMA\nDescrição.\n\n## USUÁRIOS/PERSONAS\nDescrição.\n\n## FUNCIONALIDADES/MVP\nDescrição.\n\n## MÉTRICAS DE SUCESSO\nDescrição.`;
97
- const result = validarEstrutura(1, prd, 'base');
98
- expect(result.secoes_encontradas).toHaveLength(4);
99
- });
100
- it('deve aceitar sinônimos (Público-alvo, Solução, KPIs)', () => {
101
- const prd = `## Dor do Cliente\nDescrição.\n\n## Público-alvo\nDescrição.\n\n## Solução Proposta\nDescrição.\n\n## KPIs\nDescrição.`;
102
- const result = validarEstrutura(1, prd, 'base');
103
- expect(result.secoes_encontradas).toHaveLength(4);
104
- });
105
- });
106
- describe('Validação do PRD — validator.ts (checklist)', () => {
107
- it('deve validar 4/4 itens do checklist no PRD do SubsTrack', () => {
108
- const result = validarGate(fasePRD, PRD_SUBSTRACK);
109
- expect(result.itens_validados).toHaveLength(4);
110
- expect(result.itens_pendentes).toHaveLength(0);
111
- expect(result.valido).toBe(true);
112
- });
113
- it('deve reconhecer "problema" via sinônimos', () => {
114
- const prd = 'A dor principal é a falta de controle financeiro sobre assinaturas.';
115
- const result = validarGate(fasePRD, prd);
116
- // Pelo menos o item "Problema claramente definido" deve passar (sinônimo "dor")
117
- expect(result.itens_validados.some(i => i.toLowerCase().includes('problema'))).toBe(true);
118
- });
119
- it('deve reconhecer "personas" via sinônimos', () => {
120
- const prd = 'O público-alvo são jovens profissionais de 25-35 anos.';
121
- const result = validarGate(fasePRD, prd);
122
- expect(result.itens_validados.some(i => i.toLowerCase().includes('persona') || i.toLowerCase().includes('usuário'))).toBe(true);
123
- });
124
- it('deve reconhecer "funcionalidades" via sinônimos', () => {
125
- const prd = 'O MVP inclui dashboard, alertas e cancelamento automático.';
126
- const result = validarGate(fasePRD, prd);
127
- expect(result.itens_validados.some(i => i.toLowerCase().includes('funcionalidade') || i.toLowerCase().includes('mvp'))).toBe(true);
128
- });
129
- it('deve reconhecer "métricas" via sinônimos', () => {
130
- const prd = 'Os KPIs incluem taxa de ativação, retenção e NPS.';
131
- const result = validarGate(fasePRD, prd);
132
- expect(result.itens_validados.some(i => i.toLowerCase().includes('métrica') || i.toLowerCase().includes('sucesso'))).toBe(true);
133
- });
134
- });
135
- describe('Score combinado (calcularQualityScore simulado)', () => {
136
- it('PRD do SubsTrack deve atingir score >= 70', () => {
137
- const estruturaResult = validarEstrutura(1, PRD_SUBSTRACK, 'base');
138
- const gateResult = validarGate(fasePRD, PRD_SUBSTRACK);
139
- const totalChecklist = gateResult.itens_validados.length + gateResult.itens_pendentes.length;
140
- const checklistScore = totalChecklist > 0
141
- ? (gateResult.itens_validados.length / totalChecklist) * 100
142
- : 100;
143
- const tamanhoScore = estruturaResult.tamanho_ok ? 100 : 50;
144
- const qualityScore = Math.round((estruturaResult.score * 0.30) +
145
- (checklistScore * 0.50) +
146
- (tamanhoScore * 0.20));
147
- expect(qualityScore).toBeGreaterThanOrEqual(70);
148
- });
149
- it('PRD mínimo com 4 seções deve atingir score >= 70', () => {
150
- const prdMinimo = `## Problema\nDescrição do problema com detalhes suficientes para validação.\n\n## Personas\nUsuários identificados com perfis detalhados.\n\n## Funcionalidades MVP\nLista de funcionalidades do MVP com descrições.\n\n## Métricas de Sucesso\nKPIs e métricas definidas com metas claras.`;
151
- const estruturaResult = validarEstrutura(1, prdMinimo, 'base');
152
- const gateResult = validarGate(fasePRD, prdMinimo);
153
- const totalChecklist = gateResult.itens_validados.length + gateResult.itens_pendentes.length;
154
- const checklistScore = totalChecklist > 0
155
- ? (gateResult.itens_validados.length / totalChecklist) * 100
156
- : 100;
157
- const tamanhoScore = estruturaResult.tamanho_ok ? 100 : 50;
158
- const qualityScore = Math.round((estruturaResult.score * 0.30) +
159
- (checklistScore * 0.50) +
160
- (tamanhoScore * 0.20));
161
- expect(qualityScore).toBeGreaterThanOrEqual(70);
162
- });
163
- });
164
- //# sourceMappingURL=prd-validation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prd-validation.test.js","sourceRoot":"","sources":["../../src/tests/prd-validation.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Testes para readiness checker e dashboard
3
- */
4
- export {};
5
- //# sourceMappingURL=readiness-dashboard.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readiness-dashboard.test.d.ts","sourceRoot":"","sources":["../../src/tests/readiness-dashboard.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}