playwright-e2e-mcp 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,16 @@
1
1
  /**
2
- * Tool 8 — diagnose-flaky: run a failing test several times with
3
- * retries disabled and decide — from evidence — whether it is
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
- * The verdict logic is a pure function (exported for unit tests).
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
- `> ⚠️ **FLAKY** — ${summary.passed} of ${total} run(s) passed${summary.sameError
100
- ? ' and the failures share one signature (a real intermittent bug, not random noise)'
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
- function renderDiagnosis(target, runs, summary, runsRequested) {
115
- const lines = [
116
- `## Flaky diagnosis — ${target.map((t) => `\`${t}\``).join(', ')} × ${runsRequested} runs`,
117
- '',
118
- '**Mode:** Playwright retries disabled (`--retries=0`, no auto-retry) so each run is honest evidence.',
119
- '',
120
- '| run | status | duration | first failure |',
121
- '| ---: | --- | --- | --- |',
122
- ];
123
- runs.forEach((run, i) => {
124
- const status = run.noTests
125
- ? '∅ no tests'
126
- : run.ok
127
- ? '✅ passed'
128
- : run.errorKind
129
- ? `🛑 ${run.errorKind}`
130
- : '❌ failed';
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.push('', verdictBlock(summary), '');
135
- if (summary.verdict === 'FLAKY' || summary.verdict === 'CONSISTENTLY FAILING') {
136
- lines.push('**Next steps:**', '');
137
- lines.push('1. `get-failure` for the full error, DOM snapshot and failed requests of the last run.');
138
- lines.push('2. Re-run only these tests after your fix: `run-test` with `testFiles` and `lastFailed: true`.');
139
- if (summary.verdict === 'FLAKY') {
140
- lines.push('3. Diagnose again with `runs: 5` for stronger evidence before quarantining the test.');
141
- }
142
- lines.push('');
143
- }
144
- return lines.join('\n');
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 (s !== null &&
152
- s.expected === 0 &&
153
- s.unexpected === 0 &&
154
- s.flaky === 0 &&
155
- s.skipped === 0);
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: 'Run a failing test multiple times with retries disabled and return an evidence-based verdict: CONSISTENTLY FAILING (real bug), FLAKY (intermittent — includes pass/fail counts and error-signature variance) or NOT REPRODUCING (one-off). Defaults to the tests that failed in the most recent run.',
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 outcomeList = [];
200
- let lastResult;
201
- for (let i = 0; i < runsRequested; i += 1) {
202
- if (ctx.signal?.aborted)
203
- break;
204
- ctx.logger.info('diagnose-flaky run', { run: i + 1, of: runsRequested, target: sanitized });
205
- const result = await runTests({
206
- projectRoot: root,
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
- testFiles: sanitized,
209
- browser: args.browser,
210
- headed: args.headed,
211
- workers: args.workers,
212
- timeoutMs: args.timeoutMs,
213
- retries: 0,
214
- retryOnFailure: false,
215
- signal: ctx.signal,
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
- verdict: summary.verdict,
241
- runs: outcomeList.length,
242
- passed: summary.passed,
243
- failed: summary.failed,
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 (outcomeList.every((r) => r.errorKind)) {
246
- const kinds = [...new Set(outcomeList.map((r) => r.errorKind))].join(', ');
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
- lastResult?.errorMessage ? clipLines(lastResult.errorMessage, 4, 600) : '',
253
- lastResult?.hint ? `> ${lastResult.hint}` : '',
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
- return toolText(renderDiagnosis(sanitized.map((file) => relativeToRoot(root, file)), outcomeList, summary, runsRequested));
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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"}