@maestro-ai/mcp-server 5.4.5 → 5.5.1
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 +68 -83
- package/dist/content/rules/RULES.md +14 -0
- package/dist/core/metrics/MetricsCollector.d.ts +28 -12
- package/dist/core/metrics/MetricsCollector.d.ts.map +1 -1
- package/dist/core/metrics/MetricsCollector.js +151 -12
- package/dist/core/metrics/MetricsCollector.js.map +1 -1
- package/dist/core/validation/ValidationPipeline.d.ts +24 -2
- package/dist/core/validation/ValidationPipeline.d.ts.map +1 -1
- package/dist/core/validation/ValidationPipeline.js +46 -2
- package/dist/core/validation/ValidationPipeline.js.map +1 -1
- package/dist/core/validation/layers/DeliverableValidator.d.ts +13 -0
- package/dist/core/validation/layers/DeliverableValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/DeliverableValidator.js +276 -0
- package/dist/core/validation/layers/DeliverableValidator.js.map +1 -0
- package/dist/flows/onboarding-orchestrator.js +5 -5
- package/dist/flows/onboarding-orchestrator.js.map +1 -1
- package/dist/gates/contextual-recommender.d.ts.map +1 -1
- package/dist/gates/contextual-recommender.js +260 -1
- package/dist/gates/contextual-recommender.js.map +1 -1
- package/dist/gates/validator.d.ts +5 -6
- package/dist/gates/validator.d.ts.map +1 -1
- package/dist/gates/validator.js +9 -6
- package/dist/gates/validator.js.map +1 -1
- package/dist/handlers/shared-prompt-handler.d.ts.map +1 -1
- package/dist/handlers/shared-prompt-handler.js +15 -14
- package/dist/handlers/shared-prompt-handler.js.map +1 -1
- package/dist/middleware/adr-generation.middleware.d.ts +5 -0
- package/dist/middleware/adr-generation.middleware.d.ts.map +1 -0
- package/dist/middleware/adr-generation.middleware.js +214 -0
- package/dist/middleware/adr-generation.middleware.js.map +1 -0
- package/dist/middleware/flow-engine.middleware.d.ts +5 -3
- package/dist/middleware/flow-engine.middleware.d.ts.map +1 -1
- package/dist/middleware/flow-engine.middleware.js +18 -10
- package/dist/middleware/flow-engine.middleware.js.map +1 -1
- package/dist/middleware/index.d.ts +18 -11
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +24 -11
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/orchestration-pipeline.middleware.d.ts +42 -0
- package/dist/middleware/orchestration-pipeline.middleware.d.ts.map +1 -0
- package/dist/middleware/orchestration-pipeline.middleware.js +57 -0
- package/dist/middleware/orchestration-pipeline.middleware.js.map +1 -0
- package/dist/middleware/skill-injection.middleware.d.ts.map +1 -1
- package/dist/middleware/skill-injection.middleware.js +6 -9
- package/dist/middleware/skill-injection.middleware.js.map +1 -1
- package/dist/middleware/validation.middleware.d.ts +11 -0
- package/dist/middleware/validation.middleware.d.ts.map +1 -1
- package/dist/middleware/validation.middleware.js +64 -4
- package/dist/middleware/validation.middleware.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +20 -14
- package/dist/router.js.map +1 -1
- package/dist/services/flow-engine.d.ts +1 -0
- package/dist/services/flow-engine.d.ts.map +1 -1
- package/dist/services/flow-engine.js +22 -10
- package/dist/services/flow-engine.js.map +1 -1
- package/dist/services/watcher.service.d.ts +45 -0
- package/dist/services/watcher.service.d.ts.map +1 -0
- package/dist/services/watcher.service.js +106 -0
- package/dist/services/watcher.service.js.map +1 -0
- package/dist/state/context.d.ts +15 -4
- package/dist/state/context.d.ts.map +1 -1
- package/dist/state/context.js +36 -9
- package/dist/state/context.js.map +1 -1
- package/dist/state/storage.d.ts.map +1 -1
- package/dist/state/storage.js +6 -0
- package/dist/state/storage.js.map +1 -1
- package/dist/tests/aprovar-gate.test.d.ts +2 -0
- package/dist/tests/aprovar-gate.test.d.ts.map +1 -0
- package/dist/tests/aprovar-gate.test.js +113 -0
- package/dist/tests/aprovar-gate.test.js.map +1 -0
- package/dist/tests/deliverable-validator.test.d.ts +12 -0
- package/dist/tests/deliverable-validator.test.d.ts.map +1 -0
- package/dist/tests/deliverable-validator.test.js +214 -0
- package/dist/tests/deliverable-validator.test.js.map +1 -0
- package/dist/tests/flow-engine.test.d.ts +2 -0
- package/dist/tests/flow-engine.test.d.ts.map +1 -0
- package/dist/tests/flow-engine.test.js +85 -0
- package/dist/tests/flow-engine.test.js.map +1 -0
- package/dist/tests/gate-orientation.test.d.ts +2 -0
- package/dist/tests/gate-orientation.test.d.ts.map +1 -0
- package/dist/tests/gate-orientation.test.js +59 -0
- package/dist/tests/gate-orientation.test.js.map +1 -0
- package/dist/tests/middleware.test.js +30 -4
- package/dist/tests/middleware.test.js.map +1 -1
- package/dist/tests/watcher.service.test.d.ts +2 -0
- package/dist/tests/watcher.service.test.d.ts.map +1 -0
- package/dist/tests/watcher.service.test.js +119 -0
- package/dist/tests/watcher.service.test.js.map +1 -0
- package/dist/tools/aprovar-gate.d.ts.map +1 -1
- package/dist/tools/aprovar-gate.js +4 -0
- package/dist/tools/aprovar-gate.js.map +1 -1
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +41 -0
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +6 -40
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/maestro-tool.d.ts.map +1 -1
- package/dist/tools/maestro-tool.js +34 -14
- package/dist/tools/maestro-tool.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +224 -71
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +27 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts +8 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +147 -99
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/gate-orientation.d.ts +11 -0
- package/dist/utils/gate-orientation.d.ts.map +1 -0
- package/dist/utils/gate-orientation.js +64 -0
- package/dist/utils/gate-orientation.js.map +1 -0
- package/dist/utils/ide-paths.d.ts +11 -0
- package/dist/utils/ide-paths.d.ts.map +1 -1
- package/dist/utils/ide-paths.js +27 -0
- package/dist/utils/ide-paths.js.map +1 -1
- package/dist/utils/instructions.d.ts +6 -1
- package/dist/utils/instructions.d.ts.map +1 -1
- package/dist/utils/instructions.js +32 -1
- package/dist/utils/instructions.js.map +1 -1
- package/package.json +2 -1
- package/dist/gates/compatibility-wrapper.d.ts +0 -139
- package/dist/gates/compatibility-wrapper.d.ts.map +0 -1
- package/dist/gates/compatibility-wrapper.js +0 -362
- package/dist/gates/compatibility-wrapper.js.map +0 -1
- package/dist/gates/unified-validator.d.ts +0 -67
- package/dist/gates/unified-validator.d.ts.map +0 -1
- package/dist/gates/unified-validator.js +0 -234
- package/dist/gates/unified-validator.js.map +0 -1
package/dist/state/context.d.ts
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Global project context management
|
|
2
|
+
* Global project context management — v6.3
|
|
3
3
|
* Tracks the current project directory across tool calls
|
|
4
|
+
* S4.1: Adds state cache to avoid repeated disk reads within the same session
|
|
4
5
|
*/
|
|
6
|
+
import type { EstadoProjeto } from "../types/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Armazena estado no cache (chamar após salvarEstado / parsearEstado bem-sucedido)
|
|
9
|
+
*/
|
|
10
|
+
export declare function setCachedEstado(estado: EstadoProjeto, diretorio: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* Recupera estado do cache se ainda válido para o diretório informado
|
|
13
|
+
*/
|
|
14
|
+
export declare function getCachedEstado(diretorio: string): EstadoProjeto | null;
|
|
15
|
+
/**
|
|
16
|
+
* Invalida o cache (chamar quando estado for modificado)
|
|
17
|
+
*/
|
|
18
|
+
export declare function invalidateEstadoCache(): void;
|
|
5
19
|
/**
|
|
6
20
|
* Check if a directory contains a valid Maestro project
|
|
7
21
|
*/
|
|
@@ -26,13 +40,10 @@ export declare function clearCurrentDirectory(): void;
|
|
|
26
40
|
export declare function hasCurrentDirectory(): boolean;
|
|
27
41
|
/**
|
|
28
42
|
* Get default projects directory based on environment
|
|
29
|
-
* In production (Docker), use /app/projects (where volume is mounted)
|
|
30
|
-
* In development, use current working directory
|
|
31
43
|
*/
|
|
32
44
|
export declare function getDefaultProjectsDirectory(): string;
|
|
33
45
|
/**
|
|
34
46
|
* Get project directory from args or fallback to current/cwd
|
|
35
|
-
* Also performs auto-detection of existing projects
|
|
36
47
|
*/
|
|
37
48
|
export declare function resolveDirectory(argsDir?: string): string;
|
|
38
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqBvD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAczD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD"}
|
package/dist/state/context.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Global project context management
|
|
2
|
+
* Global project context management — v6.3
|
|
3
3
|
* Tracks the current project directory across tool calls
|
|
4
|
+
* S4.1: Adds state cache to avoid repeated disk reads within the same session
|
|
4
5
|
*/
|
|
5
6
|
import { existsSync } from "fs";
|
|
6
7
|
import { join } from "path";
|
|
@@ -9,6 +10,35 @@ import { setProjectDirectory } from "../utils/files.js";
|
|
|
9
10
|
let currentProjectDirectory = null;
|
|
10
11
|
// Path to state file
|
|
11
12
|
const ESTADO_FILE = ".maestro/estado.json";
|
|
13
|
+
const CACHE_TTL_MS = 30_000;
|
|
14
|
+
let estadoCache = null;
|
|
15
|
+
/**
|
|
16
|
+
* Armazena estado no cache (chamar após salvarEstado / parsearEstado bem-sucedido)
|
|
17
|
+
*/
|
|
18
|
+
export function setCachedEstado(estado, diretorio) {
|
|
19
|
+
estadoCache = { estado, timestamp: Date.now(), diretorio };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Recupera estado do cache se ainda válido para o diretório informado
|
|
23
|
+
*/
|
|
24
|
+
export function getCachedEstado(diretorio) {
|
|
25
|
+
if (!estadoCache)
|
|
26
|
+
return null;
|
|
27
|
+
if (estadoCache.diretorio !== diretorio)
|
|
28
|
+
return null;
|
|
29
|
+
if (Date.now() - estadoCache.timestamp > CACHE_TTL_MS) {
|
|
30
|
+
estadoCache = null;
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return estadoCache.estado;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Invalida o cache (chamar quando estado for modificado)
|
|
37
|
+
*/
|
|
38
|
+
export function invalidateEstadoCache() {
|
|
39
|
+
estadoCache = null;
|
|
40
|
+
}
|
|
41
|
+
// ─── Directory management ─────────────────────────────────────────────────────
|
|
12
42
|
/**
|
|
13
43
|
* Check if a directory contains a valid Maestro project
|
|
14
44
|
*/
|
|
@@ -21,8 +51,11 @@ export function isValidProject(dir) {
|
|
|
21
51
|
* Also updates the files utility for local content reading
|
|
22
52
|
*/
|
|
23
53
|
export function setCurrentDirectory(dir) {
|
|
54
|
+
// Invalida cache se mudar de diretório
|
|
55
|
+
if (currentProjectDirectory !== dir) {
|
|
56
|
+
invalidateEstadoCache();
|
|
57
|
+
}
|
|
24
58
|
currentProjectDirectory = dir;
|
|
25
|
-
// Sincroniza com files.ts para leitura de content local
|
|
26
59
|
setProjectDirectory(dir);
|
|
27
60
|
}
|
|
28
61
|
/**
|
|
@@ -37,6 +70,7 @@ export function getCurrentDirectory() {
|
|
|
37
70
|
*/
|
|
38
71
|
export function clearCurrentDirectory() {
|
|
39
72
|
currentProjectDirectory = null;
|
|
73
|
+
estadoCache = null;
|
|
40
74
|
setProjectDirectory(null);
|
|
41
75
|
}
|
|
42
76
|
/**
|
|
@@ -47,8 +81,6 @@ export function hasCurrentDirectory() {
|
|
|
47
81
|
}
|
|
48
82
|
/**
|
|
49
83
|
* Get default projects directory based on environment
|
|
50
|
-
* In production (Docker), use /app/projects (where volume is mounted)
|
|
51
|
-
* In development, use current working directory
|
|
52
84
|
*/
|
|
53
85
|
export function getDefaultProjectsDirectory() {
|
|
54
86
|
return process.env.NODE_ENV === "production"
|
|
@@ -57,21 +89,16 @@ export function getDefaultProjectsDirectory() {
|
|
|
57
89
|
}
|
|
58
90
|
/**
|
|
59
91
|
* Get project directory from args or fallback to current/cwd
|
|
60
|
-
* Also performs auto-detection of existing projects
|
|
61
92
|
*/
|
|
62
93
|
export function resolveDirectory(argsDir) {
|
|
63
|
-
// If directory provided, use it and update global state
|
|
64
94
|
if (argsDir) {
|
|
65
95
|
setCurrentDirectory(argsDir);
|
|
66
96
|
return argsDir;
|
|
67
97
|
}
|
|
68
|
-
// If we have a current directory, use it
|
|
69
98
|
if (currentProjectDirectory) {
|
|
70
99
|
return currentProjectDirectory;
|
|
71
100
|
}
|
|
72
|
-
// Fallback to cwd
|
|
73
101
|
const cwd = process.cwd();
|
|
74
|
-
// Check if cwd has a valid project
|
|
75
102
|
if (isValidProject(cwd)) {
|
|
76
103
|
setCurrentDirectory(cwd);
|
|
77
104
|
return cwd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYvD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,GAC5C,aAAa,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYvD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,GAC5C,aAAa,CAyCf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CASA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAY3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/state/storage.js
CHANGED
|
@@ -60,6 +60,12 @@ export function criarEstadoInicial(projetoId, nome, diretorio, ide) {
|
|
|
60
60
|
aguardando_aprovacao: false,
|
|
61
61
|
motivo_bloqueio: undefined,
|
|
62
62
|
score_bloqueado: undefined,
|
|
63
|
+
// V6 Sprint 2: Estado compulsório (bloqueio durante correção de gate)
|
|
64
|
+
em_estado_compulsorio: false,
|
|
65
|
+
tools_permitidas_no_compulsorio: ['executar', 'validar', 'contexto'],
|
|
66
|
+
// V6 Sprint 6: Smart Auto-Flow
|
|
67
|
+
flow_phase_type: 'input_required', // Fase 1 (Produto) começa com input required
|
|
68
|
+
auto_flow_enabled: false,
|
|
63
69
|
criado_em: new Date().toISOString(),
|
|
64
70
|
atualizado_em: new Date().toISOString(),
|
|
65
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B;;GAEG;AACH,SAAS,aAAa,CAAC,SAAiB;IACpC,OAAO,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAClD,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAkB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,MAAqB;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEhD,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,SAAiB,EACjB,IAAY,EACZ,SAAiB,EACjB,GAA2C;IAE3C,OAAO;QACH,UAAU,EAAE,SAAS;QACrB,IAAI;QACJ,SAAS;QACT,KAAK,EAAE,OAAO,EAAE,+BAA+B;QAC/C,UAAU,EAAE,cAAc;QAC1B,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,EAAE,EAAE,mCAAmC;QACpD,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,KAAK;QAClB,iBAAiB,EAAE,KAAK,EAAE,2CAA2C;QACrE,gCAAgC;QAChC,aAAa,EAAE,SAAS;QACxB,SAAS,EAAE,MAAM;QACjB,wBAAwB,EAAE,KAAK;QAC/B,GAAG,EAAE,2BAA2B;QAEhC,yCAAyC;QACzC,wBAAwB,EAAE,KAAK;QAC/B,gCAAgC,EAAE,KAAK;QAEvC,6BAA6B;QAC7B,oBAAoB,EAAE,KAAK;QAC3B,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aprovar-gate.test.d.ts","sourceRoot":"","sources":["../../src/tests/aprovar-gate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { vi, describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { aprovarGate } from '../tools/aprovar-gate.js';
|
|
3
|
+
import * as storage from '../state/storage.js';
|
|
4
|
+
// Mocks
|
|
5
|
+
vi.mock('../state/storage.js', () => ({
|
|
6
|
+
parsearEstado: vi.fn(),
|
|
7
|
+
serializarEstado: vi.fn()
|
|
8
|
+
}));
|
|
9
|
+
vi.mock('../state/context.js', () => ({
|
|
10
|
+
setCurrentDirectory: vi.fn()
|
|
11
|
+
}));
|
|
12
|
+
vi.mock('../utils/files.js', () => ({
|
|
13
|
+
resolveProjectPath: vi.fn((p) => p),
|
|
14
|
+
normalizeProjectPath: vi.fn((p) => p)
|
|
15
|
+
}));
|
|
16
|
+
vi.mock('../utils/history.js', () => ({
|
|
17
|
+
logEvent: vi.fn(),
|
|
18
|
+
EventTypes: {}
|
|
19
|
+
}));
|
|
20
|
+
vi.mock('../flows/types.js', () => ({
|
|
21
|
+
getFaseComStitch: vi.fn().mockReturnValue({ nome: 'Fase de Teste', entregavel_esperado: 'Doc de Teste' })
|
|
22
|
+
}));
|
|
23
|
+
vi.mock('../services/specialist.service.js', () => ({
|
|
24
|
+
getSpecialistPersona: vi.fn().mockReturnValue('Persona de Teste')
|
|
25
|
+
}));
|
|
26
|
+
describe('AprovarGate Tool', () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
vi.clearAllMocks();
|
|
29
|
+
});
|
|
30
|
+
it('deve retornar erro se nao informar estado_json', async () => {
|
|
31
|
+
const result = await aprovarGate({
|
|
32
|
+
acao: 'aprovar',
|
|
33
|
+
estado_json: '',
|
|
34
|
+
diretorio: '/test'
|
|
35
|
+
});
|
|
36
|
+
expect(result.content[0].text).toContain('uso EXCLUSIVO do usuário');
|
|
37
|
+
expect(result.isError).toBeUndefined(); // Por design, o texto instrucional não tem isError = true
|
|
38
|
+
});
|
|
39
|
+
it('deve retornar mensagem informacional se o estado não estiver aguardando aprovação', async () => {
|
|
40
|
+
const estadoFalso = { aguardando_aprovacao: false, fase_atual: 1, total_fases: 10, nivel: 'simples' };
|
|
41
|
+
vi.mocked(storage.parsearEstado).mockReturnValue(estadoFalso);
|
|
42
|
+
const result = await aprovarGate({
|
|
43
|
+
acao: 'aprovar',
|
|
44
|
+
estado_json: JSON.stringify(estadoFalso),
|
|
45
|
+
diretorio: '/test'
|
|
46
|
+
});
|
|
47
|
+
expect(result.content[0].text).toContain('Nenhuma Aprovação Pendente');
|
|
48
|
+
});
|
|
49
|
+
it('deve retornar erro se acao for aprovar mas não houver score bloqueado', async () => {
|
|
50
|
+
const estadoAguardando = { aguardando_aprovacao: true, score_bloqueado: undefined, fase_atual: 1 };
|
|
51
|
+
vi.mocked(storage.parsearEstado).mockReturnValue(estadoAguardando);
|
|
52
|
+
const result = await aprovarGate({
|
|
53
|
+
acao: 'aprovar',
|
|
54
|
+
estado_json: JSON.stringify(estadoAguardando),
|
|
55
|
+
diretorio: '/test'
|
|
56
|
+
});
|
|
57
|
+
expect(result.isError).toBe(true);
|
|
58
|
+
expect(result.content[0].text).toContain('Aprovação Inválida');
|
|
59
|
+
});
|
|
60
|
+
it('deve aprovar o gate com sucesso, removendo flag compulsória e retornando next_action proximo', async () => {
|
|
61
|
+
const estadoValido = {
|
|
62
|
+
aguardando_aprovacao: true,
|
|
63
|
+
score_bloqueado: 60,
|
|
64
|
+
fase_atual: 1,
|
|
65
|
+
total_fases: 10,
|
|
66
|
+
gates_validados: [],
|
|
67
|
+
em_estado_compulsorio: true, // v6 compulsório
|
|
68
|
+
motivo_bloqueio: 'Faltam coisas'
|
|
69
|
+
};
|
|
70
|
+
vi.mocked(storage.parsearEstado).mockReturnValue(estadoValido);
|
|
71
|
+
vi.mocked(storage.serializarEstado).mockReturnValue({ content: '{"mock":true}', path: 'estado.json' });
|
|
72
|
+
const result = await aprovarGate({
|
|
73
|
+
acao: 'aprovar',
|
|
74
|
+
estado_json: JSON.stringify(estadoValido),
|
|
75
|
+
diretorio: '/test'
|
|
76
|
+
});
|
|
77
|
+
// Verificações de mutação de estado
|
|
78
|
+
expect(estadoValido.aguardando_aprovacao).toBe(false);
|
|
79
|
+
expect(estadoValido.score_bloqueado).toBeUndefined();
|
|
80
|
+
expect(estadoValido.motivo_bloqueio).toBeUndefined();
|
|
81
|
+
expect(estadoValido.em_estado_compulsorio).toBe(false);
|
|
82
|
+
expect(storage.serializarEstado).toHaveBeenCalledWith(estadoValido);
|
|
83
|
+
expect(result.next_action?.tool).toBe('proximo');
|
|
84
|
+
expect(result.content[0].text).toContain('Gate Aprovado pelo Usuário');
|
|
85
|
+
});
|
|
86
|
+
it('deve rejeitar o gate com sucesso e retornar next_action validar_gate', async () => {
|
|
87
|
+
const estadoValido = {
|
|
88
|
+
aguardando_aprovacao: true,
|
|
89
|
+
score_bloqueado: 60,
|
|
90
|
+
fase_atual: 1,
|
|
91
|
+
total_fases: 10,
|
|
92
|
+
gates_validados: [],
|
|
93
|
+
em_estado_compulsorio: true,
|
|
94
|
+
motivo_bloqueio: 'Faltam coisas'
|
|
95
|
+
};
|
|
96
|
+
vi.mocked(storage.parsearEstado).mockReturnValue(estadoValido);
|
|
97
|
+
vi.mocked(storage.serializarEstado).mockReturnValue({ content: '{"mock":true}', path: 'estado.json' });
|
|
98
|
+
const result = await aprovarGate({
|
|
99
|
+
acao: 'rejeitar',
|
|
100
|
+
estado_json: JSON.stringify(estadoValido),
|
|
101
|
+
diretorio: '/test'
|
|
102
|
+
});
|
|
103
|
+
// Verificações de mutação de estado
|
|
104
|
+
expect(estadoValido.aguardando_aprovacao).toBe(false);
|
|
105
|
+
expect(estadoValido.score_bloqueado).toBeUndefined();
|
|
106
|
+
expect(estadoValido.motivo_bloqueio).toBeUndefined();
|
|
107
|
+
expect(estadoValido.em_estado_compulsorio).toBe(false);
|
|
108
|
+
expect(storage.serializarEstado).toHaveBeenCalledWith(estadoValido);
|
|
109
|
+
expect(result.next_action?.tool).toBe('validar_gate');
|
|
110
|
+
expect(result.content[0].text).toContain('Gate Rejeitado pelo Usuário');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=aprovar-gate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aprovar-gate.test.js","sourceRoot":"","sources":["../../src/tests/aprovar-gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testes para DeliverableValidator v6.1
|
|
3
|
+
*
|
|
4
|
+
* Cobre os cenários críticos de validação de entregáveis de fase:
|
|
5
|
+
* - PRD vazio → bloqueado
|
|
6
|
+
* - PRD completo → aprovado
|
|
7
|
+
* - Placeholders → penalizado
|
|
8
|
+
* - Gate checklist → score aumenta quando evidenciado
|
|
9
|
+
* - Fases de código (Frontend/Backend) → tratamento especial
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=deliverable-validator.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliverable-validator.test.d.ts","sourceRoot":"","sources":["../../src/tests/deliverable-validator.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testes para DeliverableValidator v6.1
|
|
3
|
+
*
|
|
4
|
+
* Cobre os cenários críticos de validação de entregáveis de fase:
|
|
5
|
+
* - PRD vazio → bloqueado
|
|
6
|
+
* - PRD completo → aprovado
|
|
7
|
+
* - Placeholders → penalizado
|
|
8
|
+
* - Gate checklist → score aumenta quando evidenciado
|
|
9
|
+
* - Fases de código (Frontend/Backend) → tratamento especial
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from 'vitest';
|
|
12
|
+
import { DeliverableValidator } from '../core/validation/layers/DeliverableValidator.js';
|
|
13
|
+
const validator = new DeliverableValidator();
|
|
14
|
+
// ─── Helpers ───────────────────────────────────────────────────────────────
|
|
15
|
+
function makeContext(nomeFase, gateChecklist = []) {
|
|
16
|
+
return {
|
|
17
|
+
projectPath: '/test/project',
|
|
18
|
+
nomeFase,
|
|
19
|
+
gateChecklist,
|
|
20
|
+
tier: 'base',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const PRD_VAZIO = '';
|
|
24
|
+
const PRD_CURTO = '# PRD\n\nAlgum texto.';
|
|
25
|
+
const PRD_PLACEHOLDER = `# PRD do Produto
|
|
26
|
+
|
|
27
|
+
## Problema
|
|
28
|
+
Lorem ipsum dolor sit amet.
|
|
29
|
+
|
|
30
|
+
## Objetivo
|
|
31
|
+
TODO: definir objetivo
|
|
32
|
+
|
|
33
|
+
## Persona
|
|
34
|
+
[inserir persona aqui]
|
|
35
|
+
|
|
36
|
+
## MVP
|
|
37
|
+
- Feature A
|
|
38
|
+
- Feature B
|
|
39
|
+
|
|
40
|
+
## Funcionalidades
|
|
41
|
+
FIXME: listar funcionalidades
|
|
42
|
+
`;
|
|
43
|
+
const PRD_COMPLETO = `# PRD — Sistema de Gestão de Pedidos
|
|
44
|
+
|
|
45
|
+
## Problema
|
|
46
|
+
Restaurantes perdem pedidos por falta de sistema centralizado. O processo manual gera erros e atrasos.
|
|
47
|
+
|
|
48
|
+
## Objetivo
|
|
49
|
+
Criar um sistema digital que centralize pedidos, reduza erros em 80% e aumente a satisfação dos clientes.
|
|
50
|
+
|
|
51
|
+
## Persona
|
|
52
|
+
**João, Gerente de Restaurante** — 35 anos, usa smartphone, precisa de visibilidade em tempo real dos pedidos.
|
|
53
|
+
|
|
54
|
+
## MVP
|
|
55
|
+
O MVP inclui: cadastro de produtos, recebimento de pedidos via tablet, notificação para cozinha, e relatório diário.
|
|
56
|
+
|
|
57
|
+
## Funcionalidades Principais
|
|
58
|
+
1. Cadastro de cardápio com categorias e preços
|
|
59
|
+
2. Interface de pedido para garçons (tablet)
|
|
60
|
+
3. Painel da cozinha com fila de pedidos
|
|
61
|
+
4. Relatório de vendas por período
|
|
62
|
+
5. Integração com sistema de pagamento
|
|
63
|
+
|
|
64
|
+
## Critérios de Sucesso
|
|
65
|
+
- Redução de 80% nos erros de pedido
|
|
66
|
+
- Tempo de atendimento < 2 minutos
|
|
67
|
+
- Satisfação do cliente ≥ 4.5/5
|
|
68
|
+
`;
|
|
69
|
+
const REQUISITOS_COMPLETO = `# Requisitos do Sistema
|
|
70
|
+
|
|
71
|
+
## RF-001 — Cadastro de Produto
|
|
72
|
+
O sistema deve permitir cadastrar produtos com nome, preço e categoria.
|
|
73
|
+
**Critério de aceite:** Produto salvo aparece no cardápio em < 1s.
|
|
74
|
+
|
|
75
|
+
## RF-002 — Pedido via Tablet
|
|
76
|
+
O garçom deve conseguir registrar pedidos pelo tablet.
|
|
77
|
+
**Critério de aceite:** Pedido enviado para cozinha em < 3s.
|
|
78
|
+
|
|
79
|
+
## RNF-001 — Performance
|
|
80
|
+
O sistema deve responder em < 500ms para 95% das requisições.
|
|
81
|
+
|
|
82
|
+
## RNF-002 — Disponibilidade
|
|
83
|
+
O sistema deve ter uptime de 99.9%.
|
|
84
|
+
|
|
85
|
+
## Critérios de Aceite Gerais
|
|
86
|
+
Todos os RFs devem ter testes automatizados com cobertura > 80%.
|
|
87
|
+
`;
|
|
88
|
+
// ─── Testes ────────────────────────────────────────────────────────────────
|
|
89
|
+
describe('DeliverableValidator: Fase Produto (PRD)', () => {
|
|
90
|
+
it('deve BLOQUEAR entregável vazio', async () => {
|
|
91
|
+
const result = await validator.validate(PRD_VAZIO, makeContext('Produto'));
|
|
92
|
+
expect(result.passed).toBe(false);
|
|
93
|
+
expect(result.score).toBeLessThan(70);
|
|
94
|
+
});
|
|
95
|
+
it('deve BLOQUEAR entregável muito curto', async () => {
|
|
96
|
+
const result = await validator.validate(PRD_CURTO, makeContext('Produto'));
|
|
97
|
+
expect(result.passed).toBe(false);
|
|
98
|
+
expect(result.issues.some(i => i.type === 'content-too-short')).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it('deve PENALIZAR entregável com placeholders', async () => {
|
|
101
|
+
const result = await validator.validate(PRD_PLACEHOLDER, makeContext('Produto'));
|
|
102
|
+
expect(result.issues.some(i => i.type === 'placeholder-content')).toBe(true);
|
|
103
|
+
// Score deve ser menor que um PRD sem placeholders
|
|
104
|
+
const resultSemPlaceholder = await validator.validate(PRD_COMPLETO, makeContext('Produto'));
|
|
105
|
+
expect(result.score).toBeLessThan(resultSemPlaceholder.score);
|
|
106
|
+
});
|
|
107
|
+
it('deve APROVAR PRD completo com todas as seções', async () => {
|
|
108
|
+
const result = await validator.validate(PRD_COMPLETO, makeContext('Produto'));
|
|
109
|
+
expect(result.passed).toBe(true);
|
|
110
|
+
expect(result.score).toBeGreaterThanOrEqual(70);
|
|
111
|
+
});
|
|
112
|
+
it('deve ter score maior quando gate checklist é evidenciado', async () => {
|
|
113
|
+
const gate = ['problema', 'persona', 'funcionalidades'];
|
|
114
|
+
const resultSemGate = await validator.validate(PRD_COMPLETO, makeContext('Produto', []));
|
|
115
|
+
const resultComGate = await validator.validate(PRD_COMPLETO, makeContext('Produto', gate));
|
|
116
|
+
// Com gate evidenciado, score deve ser igual ou maior (bônus)
|
|
117
|
+
expect(resultComGate.score).toBeGreaterThanOrEqual(resultSemGate.score);
|
|
118
|
+
});
|
|
119
|
+
it('deve PENALIZAR quando gate checklist não é evidenciado', async () => {
|
|
120
|
+
const gate = ['análise competitiva detalhada', 'projeção financeira de 5 anos', 'pesquisa com 1000 usuários'];
|
|
121
|
+
const result = await validator.validate(PRD_COMPLETO, makeContext('Produto', gate));
|
|
122
|
+
// Gate items muito específicos não estarão no PRD → penalidade
|
|
123
|
+
expect(result.issues.some(i => i.type === 'gate-checklist-incomplete')).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('DeliverableValidator: Fase Requisitos', () => {
|
|
127
|
+
it('deve APROVAR requisitos completos com RF, RNF e critérios', async () => {
|
|
128
|
+
const result = await validator.validate(REQUISITOS_COMPLETO, makeContext('Requisitos'));
|
|
129
|
+
expect(result.passed).toBe(true);
|
|
130
|
+
expect(result.score).toBeGreaterThanOrEqual(70);
|
|
131
|
+
});
|
|
132
|
+
it('deve detectar ausência de critérios de aceite', async () => {
|
|
133
|
+
const semCriterios = `# Requisitos\n\n## RF-001\nO sistema deve fazer X.\n\n## RNF-001\nPerformance adequada.\n`;
|
|
134
|
+
const result = await validator.validate(semCriterios, makeContext('Requisitos'));
|
|
135
|
+
// 'aceite' está nos termos obrigatórios — deve detectar ausência
|
|
136
|
+
const missingIssue = result.issues.find(i => i.type === 'missing-sections');
|
|
137
|
+
expect(missingIssue).toBeDefined();
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('DeliverableValidator: Qualidade do Markdown', () => {
|
|
141
|
+
it('deve detectar documento sem headings', async () => {
|
|
142
|
+
const semHeadings = 'Apenas texto sem nenhum heading markdown. '.repeat(50);
|
|
143
|
+
const result = await validator.validate(semHeadings, makeContext('Produto'));
|
|
144
|
+
expect(result.issues.some(i => i.type === 'no-headings')).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
it('deve detectar documento apenas com bullets', async () => {
|
|
147
|
+
const apenasBullets = Array(20).fill('- Item de lista sem contexto').join('\n');
|
|
148
|
+
const result = await validator.validate(apenasBullets, makeContext('Produto'));
|
|
149
|
+
expect(result.issues.some(i => i.type === 'only-bullets')).toBe(true);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe('DeliverableValidator: Fases de Código (Frontend/Backend)', () => {
|
|
153
|
+
const codigoFrontend = `
|
|
154
|
+
import React, { useState } from 'react';
|
|
155
|
+
import { useNavigate } from 'react-router-dom';
|
|
156
|
+
|
|
157
|
+
// Componente de lista de pedidos
|
|
158
|
+
export function OrderList() {
|
|
159
|
+
const [orders, setOrders] = useState([]);
|
|
160
|
+
const navigate = useNavigate();
|
|
161
|
+
|
|
162
|
+
// Estado de carregamento
|
|
163
|
+
const [loading, setLoading] = useState(false);
|
|
164
|
+
|
|
165
|
+
return (
|
|
166
|
+
<div className="order-list">
|
|
167
|
+
{orders.map(order => (
|
|
168
|
+
<div key={order.id}>{order.name}</div>
|
|
169
|
+
))}
|
|
170
|
+
</div>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Rota principal
|
|
175
|
+
export default OrderList;
|
|
176
|
+
`;
|
|
177
|
+
it('deve detectar entregável de código para fase Frontend', async () => {
|
|
178
|
+
const result = await validator.validate(codigoFrontend, makeContext('Frontend'));
|
|
179
|
+
// Para código, não deve exigir headings Markdown
|
|
180
|
+
const noHeadingsIssue = result.issues.find(i => i.type === 'no-headings');
|
|
181
|
+
// Código legítimo não deve ser bloqueado por falta de headings Markdown
|
|
182
|
+
// (o validator deve detectar que é código e não Markdown)
|
|
183
|
+
expect(result.score).toBeGreaterThan(0); // Não deve dar score 0 para código válido
|
|
184
|
+
});
|
|
185
|
+
it('deve ter tamanho mínimo menor para fases de código', async () => {
|
|
186
|
+
// Fases de código têm tamanho mínimo de 300 chars (menor que PRD com 800)
|
|
187
|
+
const codigoCurto = `export function hello() { return 'world'; }`;
|
|
188
|
+
const result = await validator.validate(codigoCurto, makeContext('Frontend'));
|
|
189
|
+
// Código curto pode falhar por tamanho, mas não por ausência de headings
|
|
190
|
+
const noHeadingsIssue = result.issues.find(i => i.type === 'no-headings');
|
|
191
|
+
// Para código, não deve ter issue de headings
|
|
192
|
+
expect(noHeadingsIssue).toBeUndefined();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe('DeliverableValidator: Score e Threshold', () => {
|
|
196
|
+
it('score deve ser 100 para documento perfeito sem issues', async () => {
|
|
197
|
+
// Fase sem seções obrigatórias definidas → sem penalidades de seção
|
|
198
|
+
const conteudoPerfeito = `# Documento Perfeito\n\n${'Conteúdo detalhado e completo. '.repeat(30)}`;
|
|
199
|
+
const result = await validator.validate(conteudoPerfeito, makeContext('Desconhecida'));
|
|
200
|
+
expect(result.score).toBeGreaterThanOrEqual(90); // Sem penalidades → score alto
|
|
201
|
+
});
|
|
202
|
+
it('threshold de aprovação deve ser 70', async () => {
|
|
203
|
+
// Verificar que o threshold é 70 (não 60 nem 80)
|
|
204
|
+
const result = await validator.validate(PRD_COMPLETO, makeContext('Produto'));
|
|
205
|
+
// PRD completo deve passar com score ≥ 70
|
|
206
|
+
if (result.score >= 70) {
|
|
207
|
+
expect(result.passed).toBe(true);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
expect(result.passed).toBe(false);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
//# sourceMappingURL=deliverable-validator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliverable-validator.test.js","sourceRoot":"","sources":["../../src/tests/deliverable-validator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-engine.test.d.ts","sourceRoot":"","sources":["../../src/tests/flow-engine.test.ts"],"names":[],"mappings":""}
|