playwright-e2e-mcp 0.2.2 → 0.3.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 +255 -35
- package/dist/cli/ci.d.ts +29 -0
- package/dist/cli/ci.js +145 -0
- package/dist/cli/ci.js.map +1 -0
- package/dist/cli/init.d.ts +40 -0
- package/dist/cli/init.js +218 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +15 -0
- package/dist/server.js +54 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/diagnose-flaky.d.ts +42 -4
- package/dist/tools/diagnose-flaky.js +342 -98
- package/dist/tools/diagnose-flaky.js.map +1 -1
- package/dist/types/index.d.ts +29 -0
- package/dist/utils/attempts-reporter.d.ts +19 -0
- package/dist/utils/attempts-reporter.js +96 -0
- package/dist/utils/attempts-reporter.js.map +1 -0
- package/dist/utils/playwright-runner.js +16 -1
- package/dist/utils/playwright-runner.js.map +1 -1
- package/dist/utils/report-parser.d.ts +1 -0
- package/dist/utils/report-parser.js +1 -1
- package/dist/utils/report-parser.js.map +1 -1
- package/package.json +18 -6
- package/skill/README.md +34 -0
- package/skill/playwright-e2e-mcp/SKILL.md +196 -0
- package/skill/playwright-e2e-mcp/references/example-session.md +53 -0
- package/skill/playwright-e2e-mcp/references/failure-kinds.md +32 -0
- package/skill/playwright-e2e-mcp/references/setup.md +120 -0
- package/skill/playwright-e2e-mcp/references/tools.md +161 -0
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tool 8 — diagnose-flaky: run
|
|
3
|
-
*
|
|
2
|
+
* Tool 8 — diagnose-flaky: run failing tests several times with retries
|
|
3
|
+
* disabled and decide, per test and from evidence, whether each one is
|
|
4
4
|
* genuinely flaky, consistently broken, or no longer reproducible.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* By default all repetitions run in one Playwright process
|
|
7
|
+
* (`--repeat-each`), which skips N-1 process and browser start-ups. A
|
|
8
|
+
* small attempts reporter records every repetition, since the JSON report
|
|
9
|
+
* keeps only one result per test. `isolate` adds a second pass with one
|
|
10
|
+
* worker so failures caused by parallelism (shared state, test-order
|
|
11
|
+
* coupling, contention) are told apart from flakiness inside the test.
|
|
12
|
+
*
|
|
13
|
+
* The verdict logic is pure functions (exported for unit tests).
|
|
7
14
|
*/
|
|
8
15
|
import { z } from 'zod';
|
|
9
16
|
import { PlaywrightMcpError } from '../types/index.js';
|
|
@@ -11,6 +18,7 @@ import { detectProject, missingPlaywrightMessage } from '../utils/project-detect
|
|
|
11
18
|
import { runTests } from '../utils/playwright-runner.js';
|
|
12
19
|
import { relativeToRoot } from '../utils/path-utils.js';
|
|
13
20
|
import { recordRun } from '../utils/run-history.js';
|
|
21
|
+
import { classifyFailure } from '../utils/report-parser.js';
|
|
14
22
|
import { clipLines, formatDuration, guard, markdownCell, resolveConfigSelection, resolveProjectRoot, sanitizeTestPathArgument, testPathExists, toolText, } from './shared.js';
|
|
15
23
|
const diagnoseFlakyInput = z.object({
|
|
16
24
|
projectRoot: z.string().optional().describe('Project directory; defaults to the server working directory'),
|
|
@@ -31,13 +39,21 @@ const diagnoseFlakyInput = z.object({
|
|
|
31
39
|
.describe('Playwright project name to run'),
|
|
32
40
|
headed: z.boolean().optional().describe('Run with a visible browser window'),
|
|
33
41
|
workers: z.number().int().min(1).max(64).optional(),
|
|
42
|
+
isolate: z
|
|
43
|
+
.boolean()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe('Also tell parallelism bugs from real flakiness: repeat in parallel (fully parallel, `workers` default 4), then repeat the failing tests with one worker'),
|
|
46
|
+
separateProcesses: z
|
|
47
|
+
.boolean()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Start a fresh Playwright process per run instead of one --repeat-each process (slower; use when the flake depends on global setup or a cold start)'),
|
|
34
50
|
timeoutMs: z
|
|
35
51
|
.number()
|
|
36
52
|
.int()
|
|
37
53
|
.min(1_000)
|
|
38
54
|
.max(3_600_000)
|
|
39
55
|
.optional()
|
|
40
|
-
.describe('Hard wall-clock limit per run (default 120000)'),
|
|
56
|
+
.describe('Hard wall-clock limit per run (default 120000); one --repeat-each process gets this × runs'),
|
|
41
57
|
config: z
|
|
42
58
|
.string()
|
|
43
59
|
.optional()
|
|
@@ -83,80 +99,257 @@ export function summarizeFlaky(runs) {
|
|
|
83
99
|
sameError: signatures.size <= 1,
|
|
84
100
|
};
|
|
85
101
|
}
|
|
102
|
+
/** `file:line` (or just the file) — what run-test and diagnose-flaky accept. */
|
|
103
|
+
export function evidenceTarget(evidence) {
|
|
104
|
+
return evidence.line ? `${evidence.file}:${evidence.line}` : evidence.file;
|
|
105
|
+
}
|
|
106
|
+
/** Group reporter attempts per test (file, line, title, project). */
|
|
107
|
+
export function groupAttempts(attempts) {
|
|
108
|
+
const byKey = new Map();
|
|
109
|
+
for (const attempt of attempts) {
|
|
110
|
+
const key = [attempt.file, attempt.line ?? '', attempt.title, attempt.project ?? ''].join('\u0000');
|
|
111
|
+
let evidence = byKey.get(key);
|
|
112
|
+
if (!evidence) {
|
|
113
|
+
evidence = { file: attempt.file, line: attempt.line, title: attempt.title, project: attempt.project, outcomes: [] };
|
|
114
|
+
byKey.set(key, evidence);
|
|
115
|
+
}
|
|
116
|
+
const skipped = attempt.status === 'skipped';
|
|
117
|
+
const ok = attempt.status === (attempt.expectedStatus ?? 'passed');
|
|
118
|
+
evidence.outcomes.push({
|
|
119
|
+
ok: ok && !skipped,
|
|
120
|
+
durationMs: attempt.durationMs,
|
|
121
|
+
signature: ok ? undefined : failureSignature({ message: attempt.message ?? attempt.status }),
|
|
122
|
+
headline: ok ? undefined : (attempt.message ?? attempt.status),
|
|
123
|
+
noTests: skipped,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return [...byKey.values()];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Compare a test's parallel evidence with its one-worker evidence.
|
|
130
|
+
* `isolated` is undefined when the test passed every parallel attempt and
|
|
131
|
+
* was therefore not re-run.
|
|
132
|
+
*/
|
|
133
|
+
export function isolationReading(parallel, isolated) {
|
|
134
|
+
if (parallel.failed === 0 || !isolated)
|
|
135
|
+
return 'NOT REPRODUCING';
|
|
136
|
+
if (isolated.failed === 0)
|
|
137
|
+
return 'PARALLEL ONLY';
|
|
138
|
+
if (isolated.passed === 0)
|
|
139
|
+
return 'FAILS EITHER WAY';
|
|
140
|
+
return 'FLAKY ALONE TOO';
|
|
141
|
+
}
|
|
86
142
|
/* ------------------------------------------------------------------ */
|
|
87
143
|
/* Rendering */
|
|
88
144
|
/* ------------------------------------------------------------------ */
|
|
145
|
+
const VERDICT_ICON = {
|
|
146
|
+
'CONSISTENTLY FAILING': '❌',
|
|
147
|
+
FLAKY: '⚠️',
|
|
148
|
+
'NOT REPRODUCING': '✅',
|
|
149
|
+
'NO TESTS RAN': '∅',
|
|
150
|
+
};
|
|
151
|
+
const VERDICT_RANK = {
|
|
152
|
+
'CONSISTENTLY FAILING': 3,
|
|
153
|
+
FLAKY: 2,
|
|
154
|
+
'NOT REPRODUCING': 1,
|
|
155
|
+
'NO TESTS RAN': 0,
|
|
156
|
+
};
|
|
89
157
|
function verdictBlock(summary) {
|
|
90
158
|
const { verdict } = summary;
|
|
91
159
|
const total = summary.passed + summary.failed;
|
|
92
160
|
switch (verdict) {
|
|
93
161
|
case 'CONSISTENTLY FAILING':
|
|
94
|
-
return
|
|
95
|
-
`> ❌ **CONSISTENTLY FAILING** — failed all ${total} run(s)${summary.sameError ? ' with the same error' : `, but the errors differ (${summary.distinctSignatures} distinct signatures)`}. This is **not flaky**: there is a real, reproducible bug. Use \`get-failure\` for the full trace and fix it.`,
|
|
96
|
-
].join('\n');
|
|
162
|
+
return `> ❌ **CONSISTENTLY FAILING** — failed all ${total} run(s)${summary.sameError ? ' with the same error' : `, but the errors differ (${summary.distinctSignatures} distinct signatures)`}. This is **not flaky**: there is a real, reproducible bug. Use \`get-failure\` for the full trace and fix it.`;
|
|
97
163
|
case 'FLAKY':
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
: ` and failures vary (${summary.distinctSignatures} distinct signatures — often timing/environment instability)`}. Quarantine or stabilize it: re-run under load, check for missing \`await\`s, race conditions and shared state.`,
|
|
102
|
-
].join('\n');
|
|
164
|
+
return `> ⚠️ **FLAKY** — ${summary.passed} of ${total} run(s) passed${summary.sameError
|
|
165
|
+
? ' and the failures share one signature (a real intermittent bug, not random noise)'
|
|
166
|
+
: ` and failures vary (${summary.distinctSignatures} distinct signatures — often timing/environment instability)`}. Quarantine or stabilize it: re-run under load, check for missing \`await\`s, race conditions and shared state.`;
|
|
103
167
|
case 'NOT REPRODUCING':
|
|
104
|
-
return
|
|
105
|
-
`> ✅ **NOT REPRODUCING** — passed all ${total} run(s). The failure you saw was one-off (transient environment, network, or a change already fixed it). Re-run the full suite with \`run-test\` to confirm.`,
|
|
106
|
-
].join('\n');
|
|
168
|
+
return `> ✅ **NOT REPRODUCING** — passed all ${total} run(s). The failure you saw was one-off (transient environment, network, or a change already fixed it). Re-run the full suite with \`run-test\` to confirm.`;
|
|
107
169
|
case 'NO TESTS RAN':
|
|
108
170
|
default:
|
|
109
|
-
return
|
|
110
|
-
'> ⚠️ **NO TESTS RAN** — the filter matched nothing (or the run crashed before executing). Check `testFiles` with `list-tests`.',
|
|
111
|
-
].join('\n');
|
|
171
|
+
return '> ⚠️ **NO TESTS RAN** — the filter matched nothing (or the run crashed before executing). Check `testFiles` with `list-tests`.';
|
|
112
172
|
}
|
|
113
173
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
174
|
+
const READING_TEXT = {
|
|
175
|
+
'PARALLEL ONLY': '🔀 **fails only in parallel** — passes every run alone. Look for shared state between tests: the same user/account, DB rows, files, ports or global fixtures. Give each worker its own data (`testInfo.workerIndex`) or mark the file `test.describe.configure({ mode: \'serial\' })`.',
|
|
176
|
+
'FLAKY ALONE TOO': '⏱️ **flaky even alone** — the race is inside the test or the app: missing `await`, asserting before the UI settles, animation or network timing. Prefer web-first assertions (`await expect(locator)…`).',
|
|
177
|
+
'FAILS EITHER WAY': '❌ **fails alone too** — not a parallelism problem; fix it as a real bug.',
|
|
178
|
+
'NOT REPRODUCING': '✅ passed every parallel run, so it was not re-run alone.',
|
|
179
|
+
};
|
|
180
|
+
function durationRange(outcomes) {
|
|
181
|
+
const values = outcomes.filter((o) => !o.noTests).map((o) => o.durationMs);
|
|
182
|
+
if (values.length === 0)
|
|
183
|
+
return '—';
|
|
184
|
+
const min = Math.min(...values);
|
|
185
|
+
const max = Math.max(...values);
|
|
186
|
+
return min === max || max - min < 50 ? formatDuration(max) : `${formatDuration(min)}–${formatDuration(max)}`;
|
|
187
|
+
}
|
|
188
|
+
function testLabel(evidence) {
|
|
189
|
+
const project = evidence.project ? ` [${evidence.project}]` : '';
|
|
190
|
+
return `\`${evidenceTarget(evidence)}\` ${markdownCell(clipLines(evidence.title, 1, 80))}${project}`;
|
|
191
|
+
}
|
|
192
|
+
function firstHeadline(outcomes) {
|
|
193
|
+
const headline = outcomes.find((o) => o.headline)?.headline;
|
|
194
|
+
return headline ? markdownCell(clipLines(headline, 1, 140)) : '—';
|
|
195
|
+
}
|
|
196
|
+
function renderPerTest(pass) {
|
|
197
|
+
const lines = ['| test | passed | failed | time | verdict | first error |', '| --- | ---: | ---: | --- | --- | --- |'];
|
|
198
|
+
for (const evidence of pass.tests) {
|
|
199
|
+
const summary = summarizeFlaky(evidence.outcomes);
|
|
200
|
+
lines.push(`| ${testLabel(evidence)} | ${summary.passed} | ${summary.failed} | ${durationRange(evidence.outcomes)} | ${VERDICT_ICON[summary.verdict]} ${summary.verdict} | ${firstHeadline(evidence.outcomes)} |`);
|
|
201
|
+
}
|
|
202
|
+
return lines;
|
|
203
|
+
}
|
|
204
|
+
function renderRunTable(pass) {
|
|
205
|
+
const lines = ['| run | status | duration | first failure |', '| ---: | --- | --- | --- |'];
|
|
206
|
+
pass.runs.forEach((run, i) => {
|
|
207
|
+
const status = run.noTests ? '∅ no tests' : run.ok ? '✅ passed' : run.errorKind ? `🛑 ${run.errorKind}` : '❌ failed';
|
|
131
208
|
const failure = run.headline ? markdownCell(clipLines(run.headline, 1, 160)) : '—';
|
|
132
209
|
lines.push(`| ${i + 1} | ${status} | ${formatDuration(run.durationMs)} | ${failure} |`);
|
|
133
210
|
});
|
|
134
|
-
lines
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
211
|
+
return lines;
|
|
212
|
+
}
|
|
213
|
+
/** Summaries per test, or one summary for the whole run when per-test evidence is missing. */
|
|
214
|
+
function summaries(pass) {
|
|
215
|
+
if (pass.tests.length > 0)
|
|
216
|
+
return pass.tests.map((evidence) => ({ evidence, summary: summarizeFlaky(evidence.outcomes) }));
|
|
217
|
+
return [{ summary: summarizeFlaky(pass.runs) }];
|
|
218
|
+
}
|
|
219
|
+
function renderVerdicts(pass) {
|
|
220
|
+
const all = summaries(pass);
|
|
221
|
+
if (all.length === 1)
|
|
222
|
+
return [verdictBlock(all[0].summary)];
|
|
223
|
+
const lines = [];
|
|
224
|
+
const counts = new Map();
|
|
225
|
+
for (const { summary } of all)
|
|
226
|
+
counts.set(summary.verdict, (counts.get(summary.verdict) ?? 0) + 1);
|
|
227
|
+
lines.push(`**${all.length} tests:** ${[...counts.entries()]
|
|
228
|
+
.sort((a, b) => VERDICT_RANK[b[0]] - VERDICT_RANK[a[0]])
|
|
229
|
+
.map(([verdict, n]) => `${VERDICT_ICON[verdict]} ${n} ${verdict.toLowerCase()}`)
|
|
230
|
+
.join(' · ')}`, '');
|
|
231
|
+
const worst = all.reduce((a, b) => (VERDICT_RANK[b.summary.verdict] > VERDICT_RANK[a.summary.verdict] ? b : a));
|
|
232
|
+
lines.push(`Worst: ${worst.evidence ? testLabel(worst.evidence) : 'the run'}`, '', verdictBlock(worst.summary));
|
|
233
|
+
return lines;
|
|
145
234
|
}
|
|
146
235
|
/* ------------------------------------------------------------------ */
|
|
147
236
|
/* Tool */
|
|
148
237
|
/* ------------------------------------------------------------------ */
|
|
149
238
|
function ranNoTests(result) {
|
|
150
239
|
const s = result.stats;
|
|
151
|
-
return
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
240
|
+
return s !== null && s.expected === 0 && s.unexpected === 0 && s.flaky === 0 && s.skipped === 0;
|
|
241
|
+
}
|
|
242
|
+
function runOutcome(result) {
|
|
243
|
+
const first = result.failures[0];
|
|
244
|
+
const noTests = ranNoTests(result);
|
|
245
|
+
return {
|
|
246
|
+
ok: result.ok && !noTests,
|
|
247
|
+
durationMs: result.durationMs,
|
|
248
|
+
signature: failureSignature(first),
|
|
249
|
+
headline: first ? first.message.split('\n')[0] : undefined,
|
|
250
|
+
noTests,
|
|
251
|
+
errorKind: !result.ok && result.failures.length === 0 ? result.errorKind : undefined,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/** A run-level hard error (spawn/timeout/config) that will repeat on every run. */
|
|
255
|
+
function isHardError(result) {
|
|
256
|
+
return !result.ok && result.failures.length === 0 && result.errorKind !== undefined && result.errorKind !== 'REPORT_MISSING';
|
|
257
|
+
}
|
|
258
|
+
async function runPass(options) {
|
|
259
|
+
const { root, args, ctx } = options;
|
|
260
|
+
const perRunTimeout = args.timeoutMs ?? 120_000;
|
|
261
|
+
const processes = options.separateProcesses ? options.runs : 1;
|
|
262
|
+
const runs = [];
|
|
263
|
+
const attempts = [];
|
|
264
|
+
const startedAt = Date.now();
|
|
265
|
+
for (let i = 0; i < processes; i += 1) {
|
|
266
|
+
if (ctx.signal?.aborted)
|
|
267
|
+
break;
|
|
268
|
+
ctx.logger.info('diagnose-flaky run', { pass: options.label, run: i + 1, of: processes, targets: options.targets });
|
|
269
|
+
const result = await runTests({
|
|
270
|
+
projectRoot: root,
|
|
271
|
+
configPath: options.configPath,
|
|
272
|
+
testFiles: options.targets,
|
|
273
|
+
browser: args.browser,
|
|
274
|
+
headed: args.headed,
|
|
275
|
+
workers: options.workers,
|
|
276
|
+
fullyParallel: options.fullyParallel,
|
|
277
|
+
repeatEach: options.separateProcesses ? undefined : options.runs,
|
|
278
|
+
timeoutMs: options.separateProcesses ? perRunTimeout : Math.min(perRunTimeout * options.runs, 3_600_000),
|
|
279
|
+
retries: 0,
|
|
280
|
+
retryOnFailure: false,
|
|
281
|
+
collectAttempts: true,
|
|
282
|
+
signal: ctx.signal,
|
|
283
|
+
});
|
|
284
|
+
const repetitions = !options.separateProcesses && result.attempts?.length ? splitRepetitions(result, result.attempts) : [result];
|
|
285
|
+
for (const repetition of repetitions)
|
|
286
|
+
await recordRun(root, repetition, 'diagnose-flaky').catch(() => undefined);
|
|
287
|
+
attempts.push(...(result.attempts ?? []));
|
|
288
|
+
runs.push({ ...runOutcome(result), result });
|
|
289
|
+
const done = options.separateProcesses ? i + 1 : options.runs;
|
|
290
|
+
ctx.progress?.(options.progressOffset + done, options.progressTotal, `${options.label}: ${done} of ${options.runs} repetition(s) done, ${result.ok ? 'all passed' : 'failures seen'}`);
|
|
291
|
+
if (isHardError(result))
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
return { tests: groupAttempts(attempts), runs, durationMs: Date.now() - startedAt };
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Split one --repeat-each run into one run per repetition, so run history
|
|
298
|
+
* (analyze-history) counts every repetition as its own run, exactly as it
|
|
299
|
+
* did when each repetition was a separate process.
|
|
300
|
+
*/
|
|
301
|
+
export function splitRepetitions(result, attempts) {
|
|
302
|
+
const byRepeat = new Map();
|
|
303
|
+
for (const attempt of attempts) {
|
|
304
|
+
const outcomes = byRepeat.get(attempt.repeatEachIndex) ?? [];
|
|
305
|
+
const failed = attempt.status !== (attempt.expectedStatus ?? 'passed') && attempt.status !== 'skipped';
|
|
306
|
+
outcomes.push({
|
|
307
|
+
file: attempt.file,
|
|
308
|
+
line: attempt.line,
|
|
309
|
+
title: attempt.title,
|
|
310
|
+
project: attempt.project,
|
|
311
|
+
status: attempt.status,
|
|
312
|
+
durationMs: attempt.durationMs,
|
|
313
|
+
...(failed
|
|
314
|
+
? { message: attempt.message?.slice(0, 200), failureKind: classifyFailure(attempt.message ?? '', attempt.status) }
|
|
315
|
+
: {}),
|
|
316
|
+
});
|
|
317
|
+
byRepeat.set(attempt.repeatEachIndex, outcomes);
|
|
318
|
+
}
|
|
319
|
+
return [...byRepeat.entries()]
|
|
320
|
+
.sort((a, b) => a[0] - b[0])
|
|
321
|
+
.map(([, outcomes]) => {
|
|
322
|
+
const passed = outcomes.filter((o) => !o.message && o.status !== 'skipped').length;
|
|
323
|
+
const skipped = outcomes.filter((o) => o.status === 'skipped').length;
|
|
324
|
+
const failed = outcomes.length - passed - skipped;
|
|
325
|
+
const durationMs = outcomes.reduce((sum, o) => sum + (o.durationMs ?? 0), 0);
|
|
326
|
+
return {
|
|
327
|
+
...result,
|
|
328
|
+
ok: failed === 0,
|
|
329
|
+
outcomes,
|
|
330
|
+
durationMs,
|
|
331
|
+
stats: { expected: passed, unexpected: failed, flaky: 0, skipped, duration: durationMs },
|
|
332
|
+
};
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
function failingTargets(pass) {
|
|
336
|
+
return [
|
|
337
|
+
...new Set(pass.tests
|
|
338
|
+
.filter((evidence) => evidence.outcomes.some((o) => !o.ok && !o.noTests))
|
|
339
|
+
.map((evidence) => evidenceTarget(evidence))),
|
|
340
|
+
];
|
|
341
|
+
}
|
|
342
|
+
function modeLine(pass, options) {
|
|
343
|
+
const how = options.separateProcesses
|
|
344
|
+
? `${options.runs} separate Playwright processes`
|
|
345
|
+
: `one Playwright process with \`--repeat-each=${options.runs}\``;
|
|
346
|
+
const workers = options.workers !== undefined ? `, \`--workers=${options.workers}\`` : '';
|
|
347
|
+
const parallel = options.fullyParallel ? ', `--fully-parallel`' : '';
|
|
348
|
+
return `**Mode:** ${how}${workers}${parallel}; Playwright retries disabled (\`--retries=0\`, no auto-retry) so each run is honest evidence. Took ${formatDuration(pass.durationMs)}.`;
|
|
156
349
|
}
|
|
157
350
|
export const diagnoseFlakyTool = {
|
|
158
351
|
name: 'diagnose-flaky',
|
|
159
|
-
description: '
|
|
352
|
+
description: 'Repeat failing tests with retries disabled and return a per-test, evidence-based verdict: CONSISTENTLY FAILING (real bug), FLAKY (pass/fail counts, error-signature variance, duration spread) or NOT REPRODUCING. Runs all repetitions in one process by default. `isolate: true` also re-runs the failures with one worker to tell parallelism bugs (shared state) from flakiness inside the test. Defaults to the tests that failed in the most recent run.',
|
|
160
353
|
inputSchema: diagnoseFlakySchema,
|
|
161
354
|
handler: async (args, ctx) => guard('diagnose-flaky', async () => {
|
|
162
355
|
const root = await resolveProjectRoot(args.projectRoot, ctx);
|
|
@@ -196,66 +389,117 @@ export const diagnoseFlakyTool = {
|
|
|
196
389
|
});
|
|
197
390
|
}
|
|
198
391
|
const runsRequested = args.runs ?? 3;
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
392
|
+
const separateProcesses = args.separateProcesses === true;
|
|
393
|
+
const isolate = args.isolate === true;
|
|
394
|
+
const parallelWorkers = isolate ? (args.workers ?? 4) : args.workers;
|
|
395
|
+
const progressTotal = isolate ? runsRequested * 2 : runsRequested;
|
|
396
|
+
const main = await runPass({
|
|
397
|
+
root,
|
|
398
|
+
configPath,
|
|
399
|
+
targets: sanitized,
|
|
400
|
+
runs: runsRequested,
|
|
401
|
+
separateProcesses,
|
|
402
|
+
workers: parallelWorkers,
|
|
403
|
+
fullyParallel: isolate,
|
|
404
|
+
args,
|
|
405
|
+
ctx,
|
|
406
|
+
label: isolate ? 'parallel' : 'diagnosis',
|
|
407
|
+
progressOffset: 0,
|
|
408
|
+
progressTotal,
|
|
409
|
+
});
|
|
410
|
+
let alone;
|
|
411
|
+
const toIsolate = isolate ? failingTargets(main) : [];
|
|
412
|
+
if (toIsolate.length > 0 && !ctx.signal?.aborted) {
|
|
413
|
+
alone = await runPass({
|
|
414
|
+
root,
|
|
207
415
|
configPath,
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
workers:
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
416
|
+
targets: toIsolate.map((t) => sanitizeTestPathArgument(t, root)),
|
|
417
|
+
runs: runsRequested,
|
|
418
|
+
separateProcesses,
|
|
419
|
+
workers: 1,
|
|
420
|
+
args,
|
|
421
|
+
ctx,
|
|
422
|
+
label: 'isolated',
|
|
423
|
+
progressOffset: runsRequested,
|
|
424
|
+
progressTotal,
|
|
216
425
|
});
|
|
217
|
-
lastResult = result;
|
|
218
|
-
await recordRun(root, result, 'diagnose-flaky').catch(() => undefined);
|
|
219
|
-
ctx.progress?.(i + 1, runsRequested, `run ${i + 1} of ${runsRequested}: ${result.ok ? 'passed' : 'failed'}`);
|
|
220
|
-
const first = result.failures[0];
|
|
221
|
-
const noTests = ranNoTests(result);
|
|
222
|
-
outcomeList.push({
|
|
223
|
-
ok: result.ok && !noTests,
|
|
224
|
-
durationMs: result.durationMs,
|
|
225
|
-
signature: failureSignature(first),
|
|
226
|
-
headline: first ? first.message.split('\n')[0] : undefined,
|
|
227
|
-
noTests,
|
|
228
|
-
errorKind: !result.ok && result.failures.length === 0 ? result.errorKind : undefined,
|
|
229
|
-
});
|
|
230
|
-
// A run-level hard error (spawn/timeout) will repeat — stop early.
|
|
231
|
-
if (!result.ok && result.failures.length === 0 && result.errorKind && result.errorKind !== 'REPORT_MISSING') {
|
|
232
|
-
break;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
const summary = summarizeFlaky(outcomeList);
|
|
236
|
-
if (lastResult) {
|
|
237
|
-
ctx.store.setLastRun({ projectRoot: root, result: lastResult, at: Date.now() });
|
|
238
426
|
}
|
|
427
|
+
const lastRun = (alone ?? main).runs.at(-1)?.result ?? main.runs.at(-1)?.result;
|
|
428
|
+
const mainLast = main.runs.at(-1)?.result;
|
|
429
|
+
// get-failure should see the failing (parallel) evidence, not a clean isolated pass.
|
|
430
|
+
const forStore = mainLast && !mainLast.ok ? mainLast : lastRun;
|
|
431
|
+
if (forStore)
|
|
432
|
+
ctx.store.setLastRun({ projectRoot: root, result: forStore, at: Date.now() });
|
|
433
|
+
const mainSummaries = summaries(main);
|
|
239
434
|
ctx.logger.info('diagnose-flaky finished', {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
435
|
+
tests: main.tests.length,
|
|
436
|
+
verdicts: mainSummaries.map((s) => s.summary.verdict),
|
|
437
|
+
isolated: alone?.tests.length ?? 0,
|
|
438
|
+
durationMs: main.durationMs + (alone?.durationMs ?? 0),
|
|
244
439
|
});
|
|
245
|
-
if (
|
|
246
|
-
const kinds = [...new Set(
|
|
440
|
+
if (main.runs.length > 0 && main.runs.every((r) => r.errorKind) && main.tests.length === 0) {
|
|
441
|
+
const kinds = [...new Set(main.runs.map((r) => r.errorKind))].join(', ');
|
|
442
|
+
const last = main.runs.at(-1)?.result;
|
|
247
443
|
return toolText([
|
|
248
444
|
'## Flaky diagnosis could not run',
|
|
249
445
|
'',
|
|
250
446
|
`Every attempt failed at the run level (\`${kinds}\`) before any test executed.`,
|
|
251
447
|
'',
|
|
252
|
-
|
|
253
|
-
|
|
448
|
+
last?.errorMessage ? clipLines(last.errorMessage, 4, 600) : '',
|
|
449
|
+
last?.hint ? `> ${last.hint}` : '',
|
|
254
450
|
]
|
|
255
451
|
.filter(Boolean)
|
|
256
452
|
.join('\n'));
|
|
257
453
|
}
|
|
258
|
-
|
|
454
|
+
const shown = sanitized.map((file) => relativeToRoot(root, file));
|
|
455
|
+
const lines = [
|
|
456
|
+
`## Flaky diagnosis — ${shown.map((t) => `\`${t}\``).join(', ')} × ${runsRequested} runs`,
|
|
457
|
+
'',
|
|
458
|
+
modeLine(main, { runs: runsRequested, separateProcesses, workers: parallelWorkers, fullyParallel: isolate }),
|
|
459
|
+
'',
|
|
460
|
+
];
|
|
461
|
+
if (main.tests.length > 0)
|
|
462
|
+
lines.push(...renderPerTest(main));
|
|
463
|
+
if (main.tests.length === 0 || separateProcesses) {
|
|
464
|
+
if (main.tests.length > 0)
|
|
465
|
+
lines.push('');
|
|
466
|
+
lines.push(...renderRunTable(main));
|
|
467
|
+
}
|
|
468
|
+
lines.push('', ...renderVerdicts(main), '');
|
|
469
|
+
if (isolate) {
|
|
470
|
+
lines.push(`### Parallel vs alone (\`--workers=${parallelWorkers}\` fully parallel → \`--workers=1\`)`, '');
|
|
471
|
+
if (!alone) {
|
|
472
|
+
lines.push(main.tests.length === 0
|
|
473
|
+
? 'Per-test evidence was not available, so nothing was re-run alone.'
|
|
474
|
+
: 'Every test passed every parallel run, so nothing needed a run alone.', '');
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
const aloneByTarget = new Map(alone.tests.map((e) => [`${evidenceTarget(e)}\u0000${e.title}\u0000${e.project ?? ''}`, e]));
|
|
478
|
+
lines.push('| test | parallel | alone | reading |', '| --- | --- | --- | --- |');
|
|
479
|
+
for (const evidence of main.tests) {
|
|
480
|
+
const parallel = summarizeFlaky(evidence.outcomes);
|
|
481
|
+
if (parallel.failed === 0)
|
|
482
|
+
continue;
|
|
483
|
+
const isolatedEvidence = aloneByTarget.get(`${evidenceTarget(evidence)}\u0000${evidence.title}\u0000${evidence.project ?? ''}`);
|
|
484
|
+
const isolated = isolatedEvidence ? summarizeFlaky(isolatedEvidence.outcomes) : undefined;
|
|
485
|
+
const reading = isolationReading(parallel, isolated);
|
|
486
|
+
const aloneCell = isolated ? `${isolated.passed}/${isolated.passed + isolated.failed} passed` : 'not run';
|
|
487
|
+
lines.push(`| ${testLabel(evidence)} | ${parallel.passed}/${parallel.passed + parallel.failed} passed | ${aloneCell} | ${READING_TEXT[reading]} |`);
|
|
488
|
+
}
|
|
489
|
+
lines.push('', `Isolated pass took ${formatDuration(alone.durationMs)}.`, '');
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
const worst = mainSummaries.reduce((a, b) => (VERDICT_RANK[b.summary.verdict] > VERDICT_RANK[a.summary.verdict] ? b : a));
|
|
493
|
+
if (worst.summary.verdict === 'FLAKY' || worst.summary.verdict === 'CONSISTENTLY FAILING') {
|
|
494
|
+
lines.push('**Next steps:**', '');
|
|
495
|
+
lines.push('1. `get-failure` for the full error, DOM snapshot and failed requests of the last failing run.');
|
|
496
|
+
lines.push('2. `suggest-fix` when the error is a locator or expectation drift; re-run with `run-test` and `lastFailed: true` after any fix.');
|
|
497
|
+
if (worst.summary.verdict === 'FLAKY' && !isolate) {
|
|
498
|
+
lines.push('3. `isolate: true` tells a shared-state/parallelism bug from a race inside the test; `runs: 5` gives stronger evidence before quarantining.');
|
|
499
|
+
}
|
|
500
|
+
lines.push('');
|
|
501
|
+
}
|
|
502
|
+
return toolText(lines.join('\n'));
|
|
259
503
|
}),
|
|
260
504
|
};
|
|
261
505
|
//# sourceMappingURL=diagnose-flaky.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose-flaky.js","sourceRoot":"","sources":["../../src/tools/diagnose-flaky.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagnose-flaky.js","sourceRoot":"","sources":["../../src/tools/diagnose-flaky.ts"],"names":[],"mappings":"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"}
|