nfunc-mcp 0.4.0 → 0.5.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.
package/README.md CHANGED
@@ -52,8 +52,8 @@ Verify with `/mcp`, then ask Claude to *"call the nfunc-mcp ping tool."*
52
52
  | Tool | What it does |
53
53
  |---|---|
54
54
  | **`run_qa_gate`** | **The one to reach for.** Runs everything applicable in parallel, correlates findings across tools, and returns a release verdict, a composite score, a per-tool scorecard and an HTML report. |
55
- | `run_lighthouse` | Lighthouse for a URL. `form_factor: "both"` finds device-specific defects the single profiles miss. |
56
- | `run_accessibility_check` | pa11y WCAG audit. `runner: "axe"` for ARIA and design systems; `"both"` for the widest sweep. |
55
+ | `run_lighthouse` | Lighthouse for **one URL, a list, or a CSV**. `form_factor: "both"` finds device-specific defects the single profiles miss. |
56
+ | `run_accessibility_check` | pa11y WCAG audit for **one URL, a list, or a CSV**. Findings are priced by **WCAG 2.1 conformance** — Level A failures are P1 because they put an AA claim out of reach. `runner: "axe"` for ARIA and design systems. |
57
57
  | `run_static_analysis` | ESLint + Semgrep over a local codebase. Uses your ESLint config if it finds one. |
58
58
  | `plan_performance_audit` | Plans a PageSpeed Insights audit — finds your URLs, groups them into page templates, costs the run. **Spends no quota.** |
59
59
  | `run_performance_audit` | Runs it. Lab scores, real-user field data, and the disagreements between them. |
@@ -93,7 +93,10 @@ Health check on https://myapp.com
93
93
  Is https://myapp.com ready to ship? Code at /path/to/repo
94
94
  Any red flags? /path/to/repo
95
95
  Run Lighthouse on https://myapp.com for mobile and desktop
96
+ Run Lighthouse on these: https://a.com, https://b.com, https://c.com
96
97
  Run an accessibility check on https://myapp.com using the axe runner
98
+ Run an accessibility check on every URL in ./top-pages.csv
99
+ Scan http://localhost:3000 and compare it to ./a11y-baseline
97
100
  Plan a PageSpeed Insights audit for https://myapp.com
98
101
  ```
99
102
 
@@ -111,10 +114,35 @@ prose and traceable evidence, not a wall of audit JSON.
111
114
  same accessibility gap, the finding is merged, promoted a tier and marked
112
115
  `confidence: "high"`. Two tools agreeing is stronger evidence than either alone.
113
116
 
114
- **Systemic collapse.** One duplicate-id component failing on eleven elements is
115
- reported as one defect, not eleven.
117
+ **Hand it a list, not a URL.** `run_lighthouse` and `run_accessibility_check`
118
+ both take a single URL, a comma-separated list, or a path to a CSV — and work
119
+ out which you gave them. Multiple URLs run as a resumable batch that writes each
120
+ report to disk and finishes with a cross-page rollup.
121
+ [How batching works →](docs/manual.md#auditing-several-urls-at-once)
122
+
123
+ **Systemic collapse, twice over.** One duplicate-id component failing on eleven
124
+ elements is reported as one defect, not eleven. And across a set of pages, a
125
+ rule failing on 4 of 4 is flagged as shared-layout — one fix in the header
126
+ clears every page, which is a different job from fixing one page's own bug.
116
127
  [How that works →](docs/manual.md#run_accessibility_check)
117
128
 
129
+ **WCAG conformance, not a violation count.** Every accessibility finding maps
130
+ to a WCAG 2.1 success criterion and says what it costs your claim. A Level A
131
+ failure is P1 — not because it feels worse, but because while it stands, Level
132
+ AA conformance is *unreachable* no matter how the other criteria score. Each run
133
+ returns a conformance verdict counting failing **criteria**, not findings: "22
134
+ issues" and "5 criteria failing" are answers to different questions, and only
135
+ one of them goes in a compliance statement.
136
+ [How →](docs/manual.md#wcag-conformance-and-priority)
137
+
138
+ **Before versus after.** Point either tool at a previous run with
139
+ `baseline_dir` and it reports what you **fixed**, what **still fails**, and what
140
+ you **newly introduced** — plus score deltas. A violation count can't tell those
141
+ apart: on a real test, adding an `aria-label` fixed five P1s and introduced an
142
+ `aria-valid-attr-value` P2, because the `aria-labelledby` pointed at a missing
143
+ id. Works against `localhost`, so it's a pre-PR check.
144
+ [How →](docs/manual.md#comparing-two-runs-before-vs-after)
145
+
118
146
  **Lab versus field.** A metric that passes in the lab but fails for real users
119
147
  means your test environment is not reproducing production — and no local tool
120
148
  can detect it. On one real homepage the lab reported a perfect CLS of 0 while
@@ -131,6 +159,12 @@ can detect it. On one real homepage the lab reported a perfect CLS of 0 while
131
159
  | **P2** | Warning — track before merging |
132
160
  | **P3** | Advisory — log as tech debt |
133
161
 
162
+ Priority is derived, not guessed. Accessibility findings follow **WCAG 2.1
163
+ conformance** — a Level A failure is P1 because it puts an AA claim out of
164
+ reach. Lighthouse findings are ranked by the category points an audit actually
165
+ costs, not by score alone. Semgrep `security` findings are P1 regardless of the
166
+ severity Semgrep assigned them.
167
+
134
168
  Corroborated and field-confirmed findings are promoted a tier; lab-only
135
169
  findings that real users don't experience are demoted.
136
170
  [Full mapping →](docs/manual.md#priority-system)
@@ -5,13 +5,41 @@ const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
5
5
  * component used everywhere, not N unrelated bugs. At or below it, each
6
6
  * element keeps its own line.
7
7
  *
8
- * Set at 10 rather than lower because distinct elements failing the same rule
9
- * are often still separate fixes: ten duplicate ids on a page are ten ids to
10
- * rename, and collapsing them hides the list a developer needs. It takes a
11
- * genuine flood axe reported 41 aria-allowed-attr failures from one reused
12
- * component before the group is more useful than its members.
8
+ * **Lowered from 10 to 2 in Phase 26.** The original 10 was chosen on the
9
+ * reasoning that "ten duplicate ids on a page are ten ids to rename, and
10
+ * collapsing them hides the list a developer needs". That objection turned out
11
+ * to be about `sample_selectors` being capped at 10, not about collapsing —
12
+ * the ids are in the evidence either way, and the cap is now generous enough
13
+ * that nothing is hidden.
14
+ *
15
+ * What forced the change was a boundary artifact seen on a live site. Two pages
16
+ * sharing one WooCommerce sorting component reported the same duplicate-id
17
+ * defect completely differently: the homepage had 11 instances and collapsed to
18
+ * a single finding (3 violations total), while a category page had exactly 10
19
+ * and listed every one (12 violations total). Identical underlying bug, and one
20
+ * page looked four times worse than the other purely because of which side of
21
+ * the threshold it fell on. A boundary that distorts cross-page comparison that
22
+ * badly is in the wrong place.
23
+ *
24
+ * Two was chosen over an intermediate value after measuring the alternatives on
25
+ * one product page: threshold 5 left 22 findings and collapsed nothing (its
26
+ * duplicate-id group sat at exactly 5), threshold 3 gave 18, and threshold 2
27
+ * gave 10 — one finding per rule, with every selector attached. At 2 the same
28
+ * component is reported identically on every page, which is the property that
29
+ * was actually missing. Three gallery images with no alt text are one template
30
+ * to fix, not three authoring mistakes.
31
+ *
32
+ * The cost is real: two genuinely unrelated defects of the same rule on
33
+ * different components now merge into one finding. `sample_selectors` makes
34
+ * that recoverable, and the cross-page rollup in the batch aggregate answers
35
+ * "shared or page-specific" without depending on this number at all.
36
+ */
37
+ const SYSTEMIC_THRESHOLD = 2;
38
+ /**
39
+ * How many selectors a systemic finding carries. Generous on purpose: the whole
40
+ * objection to collapsing was that it hid the list, so the list has to survive.
13
41
  */
14
- const SYSTEMIC_THRESHOLD = 10;
42
+ const MAX_SAMPLE_SELECTORS = 25;
15
43
  /**
16
44
  * Collapses the two ways pa11y over-reports a single defect.
17
45
  *
@@ -85,8 +113,11 @@ export function dedupeA11yFindings(findings) {
85
113
  distinct_elements: group.length,
86
114
  systemic: true,
87
115
  sample_selectors: group
88
- .slice(0, 10)
116
+ .slice(0, MAX_SAMPLE_SELECTORS)
89
117
  .map((f) => String(f.evidence["selector"] ?? "")),
118
+ ...(group.length > MAX_SAMPLE_SELECTORS
119
+ ? { selectors_truncated: group.length - MAX_SAMPLE_SELECTORS }
120
+ : {}),
90
121
  },
91
122
  });
92
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"a11yDedupe.js","sourceRoot":"","sources":["../../src/mappers/a11yDedupe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a11yDedupe.js","sourceRoot":"","sources":["../../src/mappers/a11yDedupe.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { LighthouseAuditRef, Pa11yViolation } from "../utils/outputParsers.js";
2
+ import { type TargetLevel } from "./wcagLevels.js";
2
3
  import type { Finding } from "../types.js";
3
4
  export declare function formatLighthouseFinding(audit: LighthouseAuditRef): Finding | null;
4
5
  export interface StaticAnalysisIssue {
@@ -12,4 +13,11 @@ export interface StaticAnalysisIssue {
12
13
  category?: string;
13
14
  }
14
15
  export declare function formatStaticAnalysisFinding(issue: StaticAnalysisIssue): Finding | null;
15
- export declare function formatA11yFinding(violation: Pa11yViolation): Finding | null;
16
+ /**
17
+ * One pa11y violation → a Finding, priced by WCAG conformance.
18
+ *
19
+ * `target` is the conformance level the project has committed to (AA for
20
+ * essentially all commercial work). It decides whether a criterion is a gap or
21
+ * an enhancement, so it belongs in the finding, not just the summary.
22
+ */
23
+ export declare function formatA11yFinding(violation: Pa11yViolation, target?: TargetLevel): Finding | null;
@@ -1,4 +1,5 @@
1
- import { lighthouseImpactToPriority, a11yTechniqueToPriority, axeImpactToPriority, staticAnalysisToPriority, } from "./priorityMapper.js";
1
+ import { lighthouseImpactToPriority, staticAnalysisToPriority, wcagConformanceToPriority, } from "./priorityMapper.js";
2
+ import { criterionByNumber } from "./wcagLevels.js";
2
3
  /**
3
4
  * Parenthesised measurement, or nothing at all.
4
5
  *
@@ -283,41 +284,80 @@ function axeDescription(violation) {
283
284
  ? `${cleaned}. Flagged by axe as ${violation.impact ?? "unrated"} impact; assistive-tech users are likely affected.`
284
285
  : `axe rule "${violation.code}" failed; assistive-tech users are likely affected.`;
285
286
  }
286
- export function formatA11yFinding(violation) {
287
+ /**
288
+ * One pa11y violation → a Finding, priced by WCAG conformance.
289
+ *
290
+ * `target` is the conformance level the project has committed to (AA for
291
+ * essentially all commercial work). It decides whether a criterion is a gap or
292
+ * an enhancement, so it belongs in the finding, not just the summary.
293
+ */
294
+ export function formatA11yFinding(violation, target = "AA") {
287
295
  if (violation.type === "notice")
288
296
  return null;
297
+ const criterion = violation.criterion ? criterionByNumber(violation.criterion) : null;
298
+ const { priority, blocksTarget } = wcagConformanceToPriority(violation.wcagLevel, target, {
299
+ axeImpact: violation.impact,
300
+ needsReview: violation.needsReview,
301
+ });
302
+ if (!priority)
303
+ return null;
304
+ // Every finding says which criterion it maps to and whether that criterion is
305
+ // required at the committed level. Without it a reader cannot tell a
306
+ // conformance gap from a best-practice nit, and the two carry very different
307
+ // consequences.
308
+ const wcagEvidence = criterion
309
+ ? {
310
+ wcag_criterion: criterion.number,
311
+ wcag_name: criterion.name,
312
+ wcag_level: criterion.level,
313
+ blocks_target: blocksTarget,
314
+ }
315
+ : { wcag_criterion: null, wcag_level: "not-a-criterion", blocks_target: false };
289
316
  if (violation.runner === "axe") {
290
- const priority = axeImpactToPriority(violation.impact, violation.needsReview);
291
- if (!priority)
292
- return null;
293
317
  return {
294
318
  priority,
295
319
  title: violation.message.replace(/\s*\(https?:\/\/[^)]*\)\s*$/, "").trim() || violation.code,
296
- description: axeDescription(violation),
320
+ description: withConformanceNote(axeDescription(violation), criterion, blocksTarget, target),
297
321
  evidence: {
298
322
  rule_code: violation.code,
299
323
  selector: violation.selector,
300
324
  runner: "axe",
325
+ ...wcagEvidence,
301
326
  ...(violation.impact ? { axe_impact: violation.impact } : {}),
302
327
  ...(violation.needsReview ? { needs_manual_review: true } : {}),
303
328
  },
304
329
  };
305
330
  }
306
- const priority = a11yTechniqueToPriority(violation.technique, violation.wcagLevel);
307
- if (!priority)
308
- return null;
309
331
  const describe = lookupA11yTemplate(violation.technique);
310
- const description = describe
311
- ? describe(violation)
312
- : fallbackA11yDescription(violation);
332
+ const description = describe ? describe(violation) : fallbackA11yDescription(violation);
313
333
  return {
314
334
  priority,
315
335
  title: violation.message.split(/\.\s|\.$/)[0] || violation.code,
316
- description,
336
+ description: withConformanceNote(description, criterion, blocksTarget, target),
317
337
  evidence: {
318
338
  rule_code: violation.code,
319
339
  selector: violation.selector,
340
+ ...wcagEvidence,
320
341
  },
321
342
  };
322
343
  }
344
+ /**
345
+ * Append what the finding means for the conformance claim.
346
+ *
347
+ * A defect description says what is broken for users. This says what it costs
348
+ * the project — and for a Level A failure under an AA commitment, that is the
349
+ * sentence a release manager needs, not the technique name.
350
+ */
351
+ function withConformanceNote(description, criterion, blocksTarget, target) {
352
+ if (!criterion) {
353
+ return `${description} This is a best-practice check, not a WCAG success criterion — worth fixing, but it does not affect a conformance claim.`;
354
+ }
355
+ if (!blocksTarget) {
356
+ return `${description} Maps to WCAG ${criterion.number} ${criterion.name} (Level ${criterion.level}), which is above the committed Level ${target} target — an enhancement, not a conformance gap.`;
357
+ }
358
+ if (criterion.level === "A") {
359
+ return `${description} Fails WCAG ${criterion.number} ${criterion.name} at Level A. Level A is the floor: while this fails, Level ${target} conformance is not achievable regardless of how the other criteria score.`;
360
+ }
361
+ return `${description} Fails WCAG ${criterion.number} ${criterion.name} at Level ${criterion.level}, which is required for the committed Level ${target} target.`;
362
+ }
323
363
  //# sourceMappingURL=defectFormatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defectFormatter.js","sourceRoot":"","sources":["../../src/mappers/defectFormatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defectFormatter.js","sourceRoot":"","sources":["../../src/mappers/defectFormatter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Finding, Priority } from "../types.js";
2
+ import { type TargetLevel, type WcagConformanceLevel } from "./wcagLevels.js";
2
3
  export type { Priority };
3
4
  export declare function lighthouseScoreToPriority(score: number): Priority | null;
4
5
  /**
@@ -42,3 +43,44 @@ export declare function axeImpactToPriority(impact: string | undefined, needsRev
42
43
  export declare function a11yTechniqueToPriority(technique: string, wcagLevel: string): Priority | null;
43
44
  export declare function staticAnalysisToPriority(source: "eslint" | "semgrep", severity: number | string, category?: string): Priority | null;
44
45
  export declare function sortFindingsByPriority<T extends Finding>(findings: T[]): T[];
46
+ export interface ConformancePriority {
47
+ priority: Priority | null;
48
+ /** True when this failure prevents conformance at the committed target. */
49
+ blocksTarget: boolean;
50
+ }
51
+ /**
52
+ * Priority from WCAG conformance rather than from a technique table.
53
+ *
54
+ * The levels are cumulative: claiming AA requires meeting every Level A
55
+ * criterion as well, so a Level A failure is not merely "one more issue" — it
56
+ * puts the committed target out of reach entirely until it is fixed. A page
57
+ * with three Level A failures cannot be AA conformant no matter how clean its
58
+ * AA-specific criteria are, and the priority scheme should say so.
59
+ *
60
+ * Level A failure → P1 blocks the floor; conformance impossible
61
+ * Level AA failure → P2 blocks an AA commitment
62
+ * Above the target → P3 an enhancement, not a gap (see below)
63
+ * No criterion → P3 best-practice rule; never blocks a release
64
+ *
65
+ * This replaces the Phase 13 technique table, which ranked findings by how bad
66
+ * the defect felt rather than by what it does to a conformance claim. That
67
+ * table existed because mapping level → priority naively made almost everything
68
+ * P1; the answer here is not to flatten the levels but to report the count of
69
+ * *distinct failing criteria* alongside, so "7 findings" reads as "5 Level A
70
+ * criteria failing" instead of an undifferentiated wall of P1s.
71
+ *
72
+ * Criteria above the target are deliberately not failures. Orium's checklist
73
+ * makes the same point: AAA findings against an AA commitment are enhancement
74
+ * opportunities, and counting them as gaps overstates the compliance position.
75
+ * `target_size` is the one that bites in practice — it is 2.5.5, Level AAA in
76
+ * WCAG 2.1, so it should not fail an AA audit.
77
+ *
78
+ * Two demotions apply afterwards. axe's `needsFurtherReview` marks a rule that
79
+ * could not decide on its own, and a maybe should not gate a release as hard as
80
+ * a certainty. An axe impact of `minor` marks a real but negligible defect —
81
+ * the "very minor AA issue" tier.
82
+ */
83
+ export declare function wcagConformanceToPriority(level: WcagConformanceLevel | "unknown", target: TargetLevel, options?: {
84
+ axeImpact?: string;
85
+ needsReview?: boolean;
86
+ }): ConformancePriority;
@@ -1,3 +1,4 @@
1
+ import { isRequiredFor, } from "./wcagLevels.js";
1
2
  const PRIORITY_ORDER = { P1: 0, P2: 1, P3: 2 };
2
3
  export function lighthouseScoreToPriority(score) {
3
4
  if (score < 50)
@@ -160,4 +161,61 @@ export function staticAnalysisToPriority(source, severity, category) {
160
161
  export function sortFindingsByPriority(findings) {
161
162
  return findings.sort((a, b) => PRIORITY_ORDER[a.priority] - PRIORITY_ORDER[b.priority]);
162
163
  }
164
+ const DEMOTE = { P1: "P2", P2: "P3", P3: "P3" };
165
+ /**
166
+ * Priority from WCAG conformance rather than from a technique table.
167
+ *
168
+ * The levels are cumulative: claiming AA requires meeting every Level A
169
+ * criterion as well, so a Level A failure is not merely "one more issue" — it
170
+ * puts the committed target out of reach entirely until it is fixed. A page
171
+ * with three Level A failures cannot be AA conformant no matter how clean its
172
+ * AA-specific criteria are, and the priority scheme should say so.
173
+ *
174
+ * Level A failure → P1 blocks the floor; conformance impossible
175
+ * Level AA failure → P2 blocks an AA commitment
176
+ * Above the target → P3 an enhancement, not a gap (see below)
177
+ * No criterion → P3 best-practice rule; never blocks a release
178
+ *
179
+ * This replaces the Phase 13 technique table, which ranked findings by how bad
180
+ * the defect felt rather than by what it does to a conformance claim. That
181
+ * table existed because mapping level → priority naively made almost everything
182
+ * P1; the answer here is not to flatten the levels but to report the count of
183
+ * *distinct failing criteria* alongside, so "7 findings" reads as "5 Level A
184
+ * criteria failing" instead of an undifferentiated wall of P1s.
185
+ *
186
+ * Criteria above the target are deliberately not failures. Orium's checklist
187
+ * makes the same point: AAA findings against an AA commitment are enhancement
188
+ * opportunities, and counting them as gaps overstates the compliance position.
189
+ * `target_size` is the one that bites in practice — it is 2.5.5, Level AAA in
190
+ * WCAG 2.1, so it should not fail an AA audit.
191
+ *
192
+ * Two demotions apply afterwards. axe's `needsFurtherReview` marks a rule that
193
+ * could not decide on its own, and a maybe should not gate a release as hard as
194
+ * a certainty. An axe impact of `minor` marks a real but negligible defect —
195
+ * the "very minor AA issue" tier.
196
+ */
197
+ export function wcagConformanceToPriority(level, target, options = {}) {
198
+ if (level === "unknown") {
199
+ return { priority: "P3", blocksTarget: false };
200
+ }
201
+ const blocksTarget = isRequiredFor(level, target);
202
+ let priority;
203
+ if (!blocksTarget) {
204
+ priority = "P3"; // beyond the committed level
205
+ }
206
+ else if (level === "A") {
207
+ priority = "P1";
208
+ }
209
+ else if (level === "AA") {
210
+ priority = "P2";
211
+ }
212
+ else {
213
+ priority = "P2"; // AAA, only when AAA is the committed target
214
+ }
215
+ if (options.needsReview)
216
+ priority = DEMOTE[priority];
217
+ if (options.axeImpact === "minor")
218
+ priority = DEMOTE[priority];
219
+ return { priority, blocksTarget };
220
+ }
163
221
  //# sourceMappingURL=priorityMapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"priorityMapper.js","sourceRoot":"","sources":["../../src/mappers/priorityMapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"priorityMapper.js","sourceRoot":"","sources":["../../src/mappers/priorityMapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Before-and-after comparison of two runs.
3
+ *
4
+ * A snapshot answers "what is wrong with this page". A developer about to open
5
+ * a PR has a different question: "did my fix work, and did I break anything?"
6
+ * Those are not the same question, and a count cannot distinguish them.
7
+ *
8
+ * Measured case, from a page where an `alt` attribute and an `aria-label` were
9
+ * added to fix a missing-alt-text blocker:
10
+ *
11
+ * before: 2 violations — image-alt (P1), color-contrast (P3)
12
+ * after: 2 violations — aria-valid-attr-value (P2), color-contrast (P3)
13
+ *
14
+ * Identical totals. The P1 was genuinely fixed, and the fix introduced a new
15
+ * defect, because the aria-labelledby it added pointed at an id that did not
16
+ * exist. Anyone reading "2 before, 2 after" concludes the change did nothing.
17
+ * `newly_introduced` is the half of this module that earns its keep.
18
+ */
19
+ import type { Priority } from "../types.js";
20
+ /** One defect, identified the same way in both runs. */
21
+ export interface DefectRef {
22
+ url: string;
23
+ variant: string;
24
+ /** Rule code for accessibility, audit id for Lighthouse. */
25
+ id: string;
26
+ priority: Priority;
27
+ title?: string;
28
+ }
29
+ export type ComparisonVerdict = "clean" | "improved" | "mixed" | "regression" | "unchanged";
30
+ export interface ScoreChange {
31
+ url: string;
32
+ variant: string;
33
+ category: string;
34
+ before: number;
35
+ after: number;
36
+ delta: number;
37
+ }
38
+ export interface ComparisonResult {
39
+ baseline_dir: string;
40
+ baseline_runs: number;
41
+ current_runs: number;
42
+ verdict: ComparisonVerdict;
43
+ summary: string;
44
+ fixed: Array<{
45
+ url: string;
46
+ variant: string;
47
+ id: string;
48
+ was: Priority;
49
+ title?: string;
50
+ }>;
51
+ still_failing: Array<{
52
+ url: string;
53
+ variant: string;
54
+ id: string;
55
+ priority: Priority;
56
+ title?: string;
57
+ }>;
58
+ newly_introduced: Array<{
59
+ url: string;
60
+ variant: string;
61
+ id: string;
62
+ priority: Priority;
63
+ title?: string;
64
+ }>;
65
+ score_changes?: ScoreChange[];
66
+ /** Runs present now but absent from the baseline — not comparable. */
67
+ not_in_baseline: string[];
68
+ /** Runs in the baseline that this run did not cover — silently uncompared otherwise. */
69
+ not_in_current: string[];
70
+ warnings: string[];
71
+ }
72
+ /**
73
+ * Compare two defect sets.
74
+ *
75
+ * Comparison is per (url, variant, defect id). A defect that moved priority
76
+ * between runs counts as still failing rather than as fixed-and-reintroduced,
77
+ * since it is the same defect on the same element — the priority shift shows up
78
+ * in `still_failing`.
79
+ */
80
+ export declare function compareRuns(baselineDir: string, baseline: DefectRef[], current: DefectRef[], options?: {
81
+ baselineRuns?: number;
82
+ currentRuns?: number;
83
+ baselineScores?: Map<string, Record<string, number>>;
84
+ currentScores?: Map<string, Record<string, number>>;
85
+ }): ComparisonResult;