@vibe-validate/core 0.14.2 → 0.15.0-rc.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 +24 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/output-capture-schema.d.ts +144 -0
- package/dist/output-capture-schema.d.ts.map +1 -0
- package/dist/output-capture-schema.js +52 -0
- package/dist/output-capture-schema.js.map +1 -0
- package/dist/process-utils.d.ts +85 -1
- package/dist/process-utils.d.ts.map +1 -1
- package/dist/process-utils.js +176 -1
- package/dist/process-utils.js.map +1 -1
- package/dist/result-schema.d.ts +1352 -88
- package/dist/result-schema.d.ts.map +1 -1
- package/dist/result-schema.js +114 -57
- package/dist/result-schema.js.map +1 -1
- package/dist/run-output-parser.d.ts +47 -0
- package/dist/run-output-parser.d.ts.map +1 -0
- package/dist/run-output-parser.js +109 -0
- package/dist/run-output-parser.js.map +1 -0
- package/dist/runner.d.ts +36 -3
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +199 -172
- package/dist/runner.js.map +1 -1
- package/dist/schema-utils.d.ts +57 -0
- package/dist/schema-utils.d.ts.map +1 -0
- package/dist/schema-utils.js +67 -0
- package/dist/schema-utils.js.map +1 -0
- package/dist/scripts/generate-result-schema.d.ts +1 -1
- package/dist/scripts/generate-result-schema.js +3 -3
- package/dist/scripts/generate-result-schema.js.map +1 -1
- package/dist/types.js +5 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -5
- package/validate-result.schema.json +245 -0
- package/dist/types.d.ts +0 -138
- package/dist/types.d.ts.map +0 -1
- package/validation-result.schema.json +0 -100
package/dist/runner.js
CHANGED
|
@@ -9,57 +9,14 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @packageDocumentation
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { join } from 'path';
|
|
12
|
+
import { writeFileSync, appendFileSync } from 'node:fs';
|
|
13
|
+
import { tmpdir } from 'node:os';
|
|
14
|
+
import { join } from 'node:path';
|
|
16
15
|
import stripAnsi from 'strip-ansi';
|
|
17
16
|
import { getGitTreeHash } from '@vibe-validate/git';
|
|
18
17
|
import { autoDetectAndExtract } from '@vibe-validate/extractors';
|
|
19
|
-
import { stopProcessGroup } from './process-utils.js';
|
|
20
|
-
|
|
21
|
-
* Legacy function - REMOVED in favor of @vibe-validate/git package
|
|
22
|
-
*
|
|
23
|
-
* Use `getGitTreeHash()` from '@vibe-validate/git' instead.
|
|
24
|
-
* This provides deterministic, content-based tree hashing.
|
|
25
|
-
*
|
|
26
|
-
* @deprecated Removed in v0.9.11 - Use @vibe-validate/git instead
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Calculate extraction quality score based on extractor output
|
|
30
|
-
*
|
|
31
|
-
* Scores extraction quality from 0-100 based on:
|
|
32
|
-
* - Number of errors extracted
|
|
33
|
-
* - Field completeness (file, line, message)
|
|
34
|
-
* - Actionability (can an LLM/human act on this?)
|
|
35
|
-
*
|
|
36
|
-
* @param formatted - Extractor output
|
|
37
|
-
* @returns Quality score (0-100)
|
|
38
|
-
*
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
function calculateExtractionQuality(formatted) {
|
|
42
|
-
let score = 0;
|
|
43
|
-
// Error extraction (0-60 points)
|
|
44
|
-
const errorCount = formatted.errors?.length || 0;
|
|
45
|
-
if (errorCount > 0) {
|
|
46
|
-
score += Math.min(60, errorCount * 12); // Max 60 points for 5+ errors
|
|
47
|
-
}
|
|
48
|
-
// Field completeness (0-40 points)
|
|
49
|
-
const errors = formatted.errors || [];
|
|
50
|
-
if (errors.length > 0) {
|
|
51
|
-
const firstError = errors[0];
|
|
52
|
-
let fieldScore = 0;
|
|
53
|
-
if (firstError.file)
|
|
54
|
-
fieldScore += 10;
|
|
55
|
-
if (firstError.line !== undefined)
|
|
56
|
-
fieldScore += 10;
|
|
57
|
-
if (firstError.message)
|
|
58
|
-
fieldScore += 20;
|
|
59
|
-
score += fieldScore;
|
|
60
|
-
}
|
|
61
|
-
return Math.min(100, score);
|
|
62
|
-
}
|
|
18
|
+
import { stopProcessGroup, spawnCommand } from './process-utils.js';
|
|
19
|
+
import { parseVibeValidateOutput } from './run-output-parser.js';
|
|
63
20
|
/**
|
|
64
21
|
* Parse test output to extract specific failures
|
|
65
22
|
*
|
|
@@ -94,17 +51,92 @@ export function parseFailures(output) {
|
|
|
94
51
|
failures.push(...vitestFailures.slice(0, 10)); // Limit to first 10
|
|
95
52
|
}
|
|
96
53
|
// TypeScript errors - extract file:line
|
|
54
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses TypeScript compiler output (controlled tool output), not user input
|
|
97
55
|
const tsErrors = output.match(/[^(]+\(\d+,\d+\): error TS\d+:.+/g);
|
|
98
56
|
if (tsErrors) {
|
|
99
57
|
failures.push(...tsErrors.slice(0, 10).map(e => e.trim()));
|
|
100
58
|
}
|
|
101
59
|
// ESLint errors - extract file:line
|
|
60
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: only parses ESLint output (controlled linter output), not user input
|
|
102
61
|
const eslintErrors = output.match(/\S+\.ts\(\d+,\d+\): .+/g);
|
|
103
62
|
if (eslintErrors) {
|
|
104
63
|
failures.push(...eslintErrors.slice(0, 10).map(e => e.trim()));
|
|
105
64
|
}
|
|
106
65
|
return failures;
|
|
107
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Process developer feedback for failed step
|
|
69
|
+
*
|
|
70
|
+
* Analyzes extraction quality and provides feedback for improving extractors.
|
|
71
|
+
* Only called when developerFeedback mode is enabled.
|
|
72
|
+
*
|
|
73
|
+
* @param stepResult - Step result to augment with extraction quality data
|
|
74
|
+
* @param stepName - Name of the validation step
|
|
75
|
+
* @param formatted - Formatted extractor output
|
|
76
|
+
* @param log - Logging function for output
|
|
77
|
+
* @param isWarning - Helper to check if error is a warning
|
|
78
|
+
* @param isNotWarning - Helper to check if error is not a warning
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
function processDeveloperFeedback(_stepResult, formatted, log, _isWarning, _isNotWarning) {
|
|
83
|
+
// Use extraction metadata from extractors package
|
|
84
|
+
const detectedTool = formatted.metadata?.detection?.extractor ?? 'unknown';
|
|
85
|
+
const confidence = formatted.metadata?.confidence ?? 0;
|
|
86
|
+
const completeness = formatted.metadata?.completeness ?? 0;
|
|
87
|
+
// Map confidence to level (0-100 → high/medium/low)
|
|
88
|
+
let confidenceLevel;
|
|
89
|
+
if (confidence >= 80) {
|
|
90
|
+
confidenceLevel = 'high';
|
|
91
|
+
}
|
|
92
|
+
else if (confidence >= 50) {
|
|
93
|
+
confidenceLevel = 'medium';
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
confidenceLevel = 'low';
|
|
97
|
+
}
|
|
98
|
+
// Log extraction quality for developer feedback (not added to result)
|
|
99
|
+
log(` 📊 Extraction quality: ${detectedTool} (${confidenceLevel} confidence: ${confidence}%, completeness: ${completeness}%)`);
|
|
100
|
+
// Alert on poor extraction quality (for failed steps)
|
|
101
|
+
if (confidence < 50) {
|
|
102
|
+
log(` ⚠️ Poor extraction quality (${confidence}%) - Extractors failed to extract failures`);
|
|
103
|
+
log(` 💡 vibe-validate improvement opportunity: Improve ${detectedTool} extractor for this output`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Handle fail-fast process coordination
|
|
108
|
+
*
|
|
109
|
+
* Kills all other running processes when fail-fast is enabled and a step fails.
|
|
110
|
+
* Thread-safe due to JavaScript's single-threaded event loop.
|
|
111
|
+
*
|
|
112
|
+
* @param enableFailFast - Whether fail-fast mode is enabled
|
|
113
|
+
* @param firstFailure - Reference to first failure tracking object
|
|
114
|
+
* @param step - The failed step
|
|
115
|
+
* @param output - Output from failed step
|
|
116
|
+
* @param processes - Array of all running processes
|
|
117
|
+
* @param log - Logging function for output
|
|
118
|
+
* @param ignoreStopErrors - Callback to ignore already-stopped process errors
|
|
119
|
+
* @returns Updated firstFailure reference
|
|
120
|
+
*
|
|
121
|
+
* @internal
|
|
122
|
+
*/
|
|
123
|
+
function handleFailFast(enableFailFast, firstFailure, step, output, processes, log, ignoreStopErrors) {
|
|
124
|
+
// RACE CONDITION SAFE: While multiple processes could fail simultaneously,
|
|
125
|
+
// JavaScript's single-threaded event loop ensures atomic assignment.
|
|
126
|
+
// Even if multiple failures occur, only one will be firstFailure, which is acceptable.
|
|
127
|
+
if (enableFailFast && !firstFailure) {
|
|
128
|
+
const failure = { step, output };
|
|
129
|
+
log(`\n⚠️ Fail-fast enabled: Killing remaining processes...`);
|
|
130
|
+
// Kill all other running processes
|
|
131
|
+
for (const { proc: otherProc, step: otherStep } of processes) {
|
|
132
|
+
if (otherStep !== step && otherProc.exitCode === null) {
|
|
133
|
+
stopProcessGroup(otherProc, otherStep.name).catch(ignoreStopErrors);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return failure;
|
|
137
|
+
}
|
|
138
|
+
return firstFailure;
|
|
139
|
+
}
|
|
108
140
|
/**
|
|
109
141
|
* Run validation steps in parallel with smart fail-fast
|
|
110
142
|
*
|
|
@@ -149,27 +181,23 @@ export async function runStepsInParallel(steps, phaseName, enableFailFast = fals
|
|
|
149
181
|
const stepResults = [];
|
|
150
182
|
const processes = [];
|
|
151
183
|
let firstFailure = null;
|
|
184
|
+
// Helper functions (extracted to reduce nesting depth)
|
|
185
|
+
const isWarning = (e) => e.severity === 'warning';
|
|
186
|
+
const isNotWarning = (e) => e.severity !== 'warning';
|
|
187
|
+
const ignoreStopErrors = () => { };
|
|
152
188
|
const results = await Promise.allSettled(steps.map(step => new Promise((resolve, reject) => {
|
|
153
189
|
const paddedName = step.name.padEnd(maxNameLength);
|
|
154
190
|
log(` ⏳ ${paddedName} → ${step.command}`);
|
|
155
191
|
const startTime = Date.now();
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
// NOSONAR - Intentional shell execution of user-defined commands
|
|
159
|
-
const proc = spawn(step.command, [], {
|
|
160
|
-
stdio: 'pipe',
|
|
161
|
-
shell: true, // Cross-platform: cmd.exe on Windows, sh on Unix
|
|
162
|
-
// detached: true only on Unix - Windows doesn't pipe stdio correctly when detached
|
|
163
|
-
detached: process.platform !== 'win32',
|
|
164
|
-
env: {
|
|
165
|
-
...process.env,
|
|
166
|
-
...env,
|
|
167
|
-
}
|
|
192
|
+
const proc = spawnCommand(step.command, {
|
|
193
|
+
env,
|
|
168
194
|
});
|
|
169
195
|
// Track process for potential kill
|
|
170
196
|
processes.push({ proc, step });
|
|
171
197
|
let stdout = '';
|
|
172
198
|
let stderr = '';
|
|
199
|
+
// spawnCommand always sets stdio: ['ignore', 'pipe', 'pipe'], so stdout/stderr are guaranteed non-null
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- spawnCommand always pipes stdout/stderr
|
|
173
201
|
proc.stdout.on('data', data => {
|
|
174
202
|
const chunk = data.toString();
|
|
175
203
|
// Strip ANSI escape codes to make output readable for humans and LLMs
|
|
@@ -187,6 +215,7 @@ export async function runStepsInParallel(steps, phaseName, enableFailFast = fals
|
|
|
187
215
|
}
|
|
188
216
|
}
|
|
189
217
|
});
|
|
218
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- spawnCommand always pipes stdout/stderr
|
|
190
219
|
proc.stderr.on('data', data => {
|
|
191
220
|
const chunk = data.toString();
|
|
192
221
|
// Strip ANSI escape codes from stderr as well
|
|
@@ -197,81 +226,90 @@ export async function runStepsInParallel(steps, phaseName, enableFailFast = fals
|
|
|
197
226
|
process.stderr.write(chunk); // Keep colors for terminal viewing
|
|
198
227
|
}
|
|
199
228
|
});
|
|
200
|
-
|
|
229
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complex handler for step completion, extraction, and fail-fast coordination
|
|
230
|
+
proc.on('close', exitCode => {
|
|
201
231
|
const durationMs = Date.now() - startTime;
|
|
202
|
-
const durationSecs = parseFloat((durationMs / 1000).toFixed(1));
|
|
232
|
+
const durationSecs = Number.parseFloat((durationMs / 1000).toFixed(1));
|
|
203
233
|
const output = stdout + stderr;
|
|
204
234
|
outputs.set(step.name, output);
|
|
235
|
+
// Normalize exit code (null means abnormal termination, treat as failure)
|
|
236
|
+
const code = exitCode ?? 1;
|
|
205
237
|
const status = code === 0 ? '✅' : '❌';
|
|
206
238
|
const result = code === 0 ? 'PASSED' : 'FAILED';
|
|
207
239
|
log(` ${status} ${step.name.padEnd(maxNameLength)} - ${result} (${durationSecs}s)`);
|
|
208
|
-
//
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
//
|
|
215
|
-
// Rationale: Passing tests have no failures to extract, extraction would always produce
|
|
216
|
-
// meaningless results (score: 0, no errors). Skipping saves CPU and reduces output noise.
|
|
240
|
+
// Extract errors ONLY from FAILED steps (code !== 0)
|
|
241
|
+
// Rationale: Passing tests have no failures to extract. Including empty extraction
|
|
242
|
+
// objects wastes tokens in LLM context. Only extract when there's value to provide.
|
|
243
|
+
let extraction;
|
|
244
|
+
let isCachedResult;
|
|
245
|
+
let outputFiles;
|
|
246
|
+
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Explicit null/undefined/empty check is clearer than optional chaining
|
|
217
247
|
if (code !== 0 && output && output.trim()) {
|
|
218
|
-
|
|
219
|
-
//
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
warnings: formatted.errors?.filter(e => e.severity === 'warning').length || 0,
|
|
244
|
-
errorsExtracted: formatted.errors?.filter(e => e.severity !== 'warning').length || formatted.errors?.length || 0,
|
|
245
|
-
actionable: (formatted.errors?.length || 0) > 0,
|
|
248
|
+
// Try parsing vibe-validate YAML output (from nested run commands)
|
|
249
|
+
// Uses shared parser that handles both RunResult and ValidationResult formats
|
|
250
|
+
const parsed = parseVibeValidateOutput(output);
|
|
251
|
+
if (parsed) {
|
|
252
|
+
// Use extraction from nested vibe-validate command
|
|
253
|
+
// This preserves the actual meaningful summary instead of generic "X error(s) from nested command"
|
|
254
|
+
extraction = parsed.extraction;
|
|
255
|
+
isCachedResult = parsed.isCachedResult;
|
|
256
|
+
outputFiles = parsed.outputFiles;
|
|
257
|
+
// Log cache hit status if available (nested run was cached)
|
|
258
|
+
if (parsed.isCachedResult && verbose) {
|
|
259
|
+
log(` ⚡ Step used cached result (${parsed.type} command)`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// No vibe-validate YAML detected - use standard extraction
|
|
264
|
+
const rawExtraction = autoDetectAndExtract(output);
|
|
265
|
+
// Strip empty optional fields to save tokens
|
|
266
|
+
extraction = {
|
|
267
|
+
summary: rawExtraction.summary,
|
|
268
|
+
totalErrors: rawExtraction.totalErrors,
|
|
269
|
+
errors: rawExtraction.errors,
|
|
270
|
+
...(rawExtraction.guidance?.trim() ? { guidance: rawExtraction.guidance } : {}),
|
|
271
|
+
...(rawExtraction.errorSummary?.trim() ? { errorSummary: rawExtraction.errorSummary } : {}),
|
|
272
|
+
...(rawExtraction.metadata ? { metadata: rawExtraction.metadata } : {}),
|
|
246
273
|
};
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else if (output?.trim()) {
|
|
277
|
+
// Passing step (code === 0) - check if it was cached
|
|
278
|
+
const parsed = parseVibeValidateOutput(output);
|
|
279
|
+
if (parsed) {
|
|
280
|
+
isCachedResult = parsed.isCachedResult;
|
|
281
|
+
outputFiles = parsed.outputFiles;
|
|
282
|
+
// Log cache hit status if available
|
|
283
|
+
if (parsed.isCachedResult && verbose) {
|
|
284
|
+
log(` ⚡ Step used cached result (${parsed.type} command)`);
|
|
251
285
|
}
|
|
252
286
|
}
|
|
253
287
|
}
|
|
288
|
+
// If passing step (code === 0), extraction remains undefined (token optimization)
|
|
289
|
+
// Create step result - extends CommandExecutionSchema (v0.15.0+)
|
|
290
|
+
const stepResult = {
|
|
291
|
+
name: step.name,
|
|
292
|
+
command: step.command,
|
|
293
|
+
exitCode: code,
|
|
294
|
+
durationSecs,
|
|
295
|
+
passed: code === 0,
|
|
296
|
+
...(isCachedResult !== undefined ? { isCachedResult } : {}), // Include cache status if available
|
|
297
|
+
...(extraction ? { extraction } : {}), // Conditionally include extraction
|
|
298
|
+
...(outputFiles ? { outputFiles } : {}), // Include output files for debugging (v0.15.1+)
|
|
299
|
+
};
|
|
300
|
+
// Only include extraction quality metrics when developerFeedback is enabled
|
|
301
|
+
// Skip if extraction already has metadata (from smart extractors) - that's more accurate
|
|
302
|
+
// This is for vibe-validate contributors to identify extraction improvement opportunities
|
|
303
|
+
if (developerFeedback && extraction && !extraction.metadata) {
|
|
304
|
+
processDeveloperFeedback(stepResult, extraction, log, isWarning, isNotWarning);
|
|
305
|
+
}
|
|
254
306
|
stepResults.push(stepResult);
|
|
255
307
|
if (code === 0) {
|
|
256
308
|
resolve({ step, output, durationSecs });
|
|
257
309
|
}
|
|
258
310
|
else {
|
|
259
311
|
// On first failure, kill other processes if fail-fast enabled
|
|
260
|
-
|
|
261
|
-
// JavaScript's single-threaded event loop ensures atomic assignment.
|
|
262
|
-
// Even if multiple failures occur, only one will be firstFailure, which is acceptable.
|
|
263
|
-
if (enableFailFast && !firstFailure) {
|
|
264
|
-
firstFailure = { step, output };
|
|
265
|
-
log(`\n⚠️ Fail-fast enabled: Killing remaining processes...`);
|
|
266
|
-
// Kill all other running processes
|
|
267
|
-
for (const { proc: otherProc, step: otherStep } of processes) {
|
|
268
|
-
if (otherStep !== step && otherProc.exitCode === null) {
|
|
269
|
-
stopProcessGroup(otherProc, otherStep.name).catch(() => {
|
|
270
|
-
// Process may have already exited, ignore errors
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
312
|
+
firstFailure = handleFailFast(enableFailFast, firstFailure, step, output, processes, log, ignoreStopErrors);
|
|
275
313
|
reject({ step, output, durationSecs });
|
|
276
314
|
}
|
|
277
315
|
});
|
|
@@ -285,6 +323,35 @@ export async function runStepsInParallel(steps, phaseName, enableFailFast = fals
|
|
|
285
323
|
}
|
|
286
324
|
return { success: true, outputs, stepResults };
|
|
287
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* Append step outputs to log file
|
|
328
|
+
*/
|
|
329
|
+
function appendStepOutputsToLog(logPath, outputs, failedStepName) {
|
|
330
|
+
for (const [stepName, output] of outputs) {
|
|
331
|
+
appendFileSync(logPath, `\n${'='.repeat(60)}\n`);
|
|
332
|
+
appendFileSync(logPath, `${stepName}${failedStepName === stepName ? ' - FAILED' : ''}\n`);
|
|
333
|
+
appendFileSync(logPath, `${'='.repeat(60)}\n`);
|
|
334
|
+
appendFileSync(logPath, output);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Create failed validation result
|
|
339
|
+
*
|
|
340
|
+
* Note: Error extraction now happens at step level
|
|
341
|
+
* Each failed step in phaseResults has its own extraction field with structured errors
|
|
342
|
+
*/
|
|
343
|
+
function createFailedValidationResult(failedStep, currentTreeHash, logPath, phaseResults) {
|
|
344
|
+
// Field order optimized for LLM consumption
|
|
345
|
+
return {
|
|
346
|
+
passed: false,
|
|
347
|
+
timestamp: new Date().toISOString(),
|
|
348
|
+
treeHash: currentTreeHash,
|
|
349
|
+
summary: `${failedStep.name} failed`,
|
|
350
|
+
failedStep: failedStep.name,
|
|
351
|
+
phases: phaseResults,
|
|
352
|
+
fullLogFile: logPath,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
288
355
|
/**
|
|
289
356
|
* Validation runner with state tracking and caching
|
|
290
357
|
*
|
|
@@ -322,7 +389,6 @@ export async function runStepsInParallel(steps, phaseName, enableFailFast = fals
|
|
|
322
389
|
* console.log('✅ Validation passed');
|
|
323
390
|
* } else {
|
|
324
391
|
* console.error(`❌ Failed at step: ${result.failedStep}`);
|
|
325
|
-
* console.error(result.failedStepOutput);
|
|
326
392
|
* }
|
|
327
393
|
* ```
|
|
328
394
|
*
|
|
@@ -336,7 +402,6 @@ export async function runValidation(config) {
|
|
|
336
402
|
// (see packages/cli/src/commands/validate.ts and @vibe-validate/history)
|
|
337
403
|
// Initialize log file
|
|
338
404
|
writeFileSync(logPath, `Validation started at ${new Date().toISOString()}\n\n`);
|
|
339
|
-
let failedStep = null;
|
|
340
405
|
const phaseResults = [];
|
|
341
406
|
// Run each phase
|
|
342
407
|
for (const phase of phases) {
|
|
@@ -346,77 +411,35 @@ export async function runValidation(config) {
|
|
|
346
411
|
const phaseStartTime = Date.now();
|
|
347
412
|
const result = await runStepsInParallel(phase.steps, phase.name, enableFailFast, env, config.verbose ?? false, config.yaml ?? false, config.developerFeedback ?? false);
|
|
348
413
|
const phaseDurationMs = Date.now() - phaseStartTime;
|
|
349
|
-
const durationSecs = parseFloat((phaseDurationMs / 1000).toFixed(1));
|
|
414
|
+
const durationSecs = Number.parseFloat((phaseDurationMs / 1000).toFixed(1));
|
|
350
415
|
// Append all outputs to log file
|
|
351
|
-
|
|
352
|
-
appendFileSync(logPath, `\n${'='.repeat(60)}\n`);
|
|
353
|
-
appendFileSync(logPath, `${stepName}${result.failedStep?.name === stepName ? ' - FAILED' : ''}\n`);
|
|
354
|
-
appendFileSync(logPath, `${'='.repeat(60)}\n`);
|
|
355
|
-
appendFileSync(logPath, output);
|
|
356
|
-
}
|
|
416
|
+
appendStepOutputsToLog(logPath, result.outputs, result.failedStep?.name);
|
|
357
417
|
// Record phase result
|
|
358
418
|
const phaseResult = {
|
|
359
419
|
name: phase.name,
|
|
360
|
-
durationSecs,
|
|
361
420
|
passed: result.success,
|
|
421
|
+
durationSecs,
|
|
362
422
|
steps: result.stepResults,
|
|
363
423
|
};
|
|
364
|
-
// If phase failed, extract and include output (LLM-optimized, not raw)
|
|
365
|
-
if (!result.success && result.failedStep) {
|
|
366
|
-
const rawOutput = result.outputs.get(result.failedStep.name) || '';
|
|
367
|
-
const extracted = autoDetectAndExtract(result.failedStep.name, rawOutput);
|
|
368
|
-
phaseResult.output = extracted.cleanOutput.trim() || rawOutput;
|
|
369
|
-
}
|
|
370
424
|
phaseResults.push(phaseResult);
|
|
371
425
|
if (onPhaseComplete) {
|
|
372
426
|
onPhaseComplete(phase, phaseResult);
|
|
373
427
|
}
|
|
374
|
-
// If phase failed, stop here
|
|
428
|
+
// If phase failed, stop here and return failure result
|
|
375
429
|
if (!result.success && result.failedStep) {
|
|
376
|
-
|
|
377
|
-
const failedOutput = result.outputs.get(failedStep.name) || '';
|
|
378
|
-
// Extract actionable failures from raw output (LLM-optimized, 5-10 lines instead of 100+)
|
|
379
|
-
// This reduces git notes bloat and makes errors immediately actionable
|
|
380
|
-
const extracted = autoDetectAndExtract(failedStep.name, failedOutput);
|
|
381
|
-
// Use cleanOutput for storage (already formatted for YAML/JSON, stripped of ANSI codes)
|
|
382
|
-
// Falls back to raw output if extraction fails
|
|
383
|
-
const extractedOutput = extracted.cleanOutput.trim() || failedOutput;
|
|
384
|
-
// Use structured errors from extractor (replaces deprecated parseFailures)
|
|
385
|
-
const structuredFailures = extracted.errors.map(error => {
|
|
386
|
-
const location = error.file
|
|
387
|
-
? `${error.file}${error.line ? `:${error.line}` : ''}`
|
|
388
|
-
: 'unknown';
|
|
389
|
-
return `${location} - ${error.message || 'No message'}`;
|
|
390
|
-
});
|
|
391
|
-
// IMPORTANT: Field order matches types.ts for YAML truncation safety
|
|
392
|
-
// Verbose fields (phases, failedStepOutput) at the end
|
|
393
|
-
const validationResult = {
|
|
394
|
-
passed: false,
|
|
395
|
-
timestamp: new Date().toISOString(),
|
|
396
|
-
treeHash: currentTreeHash,
|
|
397
|
-
failedStep: failedStep.name,
|
|
398
|
-
rerunCommand: failedStep.command,
|
|
399
|
-
failedTests: structuredFailures.length > 0 ? structuredFailures : undefined,
|
|
400
|
-
fullLogFile: logPath,
|
|
401
|
-
phases: phaseResults, // Contains verbose output - near end
|
|
402
|
-
failedStepOutput: extractedOutput, // Most verbose - dead last
|
|
403
|
-
};
|
|
404
|
-
// State persistence moved to validate.ts via git notes (v0.12.0+)
|
|
405
|
-
// The state file is deprecated - git notes are now the source of truth
|
|
406
|
-
return validationResult;
|
|
430
|
+
return createFailedValidationResult(result.failedStep, currentTreeHash, logPath, phaseResults);
|
|
407
431
|
}
|
|
408
432
|
}
|
|
409
433
|
// All steps passed!
|
|
410
|
-
//
|
|
434
|
+
// Field order optimized for LLM consumption
|
|
411
435
|
const validationResult = {
|
|
412
436
|
passed: true,
|
|
413
437
|
timestamp: new Date().toISOString(),
|
|
414
438
|
treeHash: currentTreeHash,
|
|
439
|
+
summary: 'Validation passed',
|
|
440
|
+
phases: phaseResults,
|
|
415
441
|
fullLogFile: logPath,
|
|
416
|
-
phases: phaseResults, // May contain output - at end for safety
|
|
417
442
|
};
|
|
418
|
-
// State persistence moved to validate.ts via git notes (v0.12.0+)
|
|
419
|
-
// The state file is deprecated - git notes are now the source of truth
|
|
420
443
|
return validationResult;
|
|
421
444
|
}
|
|
422
445
|
/**
|
|
@@ -449,7 +472,11 @@ export function setupSignalHandlers(activeProcesses) {
|
|
|
449
472
|
await Promise.all(cleanupPromises);
|
|
450
473
|
process.exit(1);
|
|
451
474
|
};
|
|
452
|
-
process.on('SIGTERM', () =>
|
|
453
|
-
|
|
475
|
+
process.on('SIGTERM', () => {
|
|
476
|
+
void cleanup('SIGTERM');
|
|
477
|
+
});
|
|
478
|
+
process.on('SIGINT', () => {
|
|
479
|
+
void cleanup('SIGINT');
|
|
480
|
+
});
|
|
454
481
|
}
|
|
455
482
|
//# sourceMappingURL=runner.js.map
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Schema Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared validation helpers for consistent error handling across packages.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { z } from 'zod';
|
|
9
|
+
/**
|
|
10
|
+
* Create a type-safe validator function from a Zod schema
|
|
11
|
+
*
|
|
12
|
+
* Provides consistent error formatting across all schema validations.
|
|
13
|
+
* Error messages include full path (e.g., "phases.0.steps.2.command: Required")
|
|
14
|
+
*
|
|
15
|
+
* @param schema - Zod schema to validate against
|
|
16
|
+
* @returns Safe validation function with success/error union type
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const safeValidateResult = createSafeValidator(ValidationResultSchema);
|
|
21
|
+
*
|
|
22
|
+
* const result = safeValidateResult(data);
|
|
23
|
+
* if (result.success) {
|
|
24
|
+
* console.log(result.data); // Typed as ValidationResult
|
|
25
|
+
* } else {
|
|
26
|
+
* console.error(result.errors); // Array of formatted error messages
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function createSafeValidator<T extends z.ZodType>(schema: T): (data: unknown) => {
|
|
31
|
+
success: true;
|
|
32
|
+
data: z.infer<T>;
|
|
33
|
+
} | {
|
|
34
|
+
success: false;
|
|
35
|
+
errors: string[];
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Create a strict validator function from a Zod schema
|
|
39
|
+
*
|
|
40
|
+
* Throws on validation failure (useful when invalid data is a critical error).
|
|
41
|
+
*
|
|
42
|
+
* @param schema - Zod schema to validate against
|
|
43
|
+
* @returns Strict validation function that throws on error
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const validateResult = createStrictValidator(ValidationResultSchema);
|
|
48
|
+
*
|
|
49
|
+
* try {
|
|
50
|
+
* const result = validateResult(data); // Typed as ValidationResult
|
|
51
|
+
* } catch (error) {
|
|
52
|
+
* console.error('Invalid data:', error);
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function createStrictValidator<T extends z.ZodType>(schema: T): (data: unknown) => z.infer<T>;
|
|
57
|
+
//# sourceMappingURL=schema-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,IACnC,MAAM,OAAO,KACtC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAezC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,IACzC,MAAM,OAAO,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAGpD"}
|