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 +38 -4
- package/dist/mappers/a11yDedupe.js +38 -7
- package/dist/mappers/a11yDedupe.js.map +1 -1
- package/dist/mappers/defectFormatter.d.ts +9 -1
- package/dist/mappers/defectFormatter.js +53 -13
- package/dist/mappers/defectFormatter.js.map +1 -1
- package/dist/mappers/priorityMapper.d.ts +42 -0
- package/dist/mappers/priorityMapper.js +58 -0
- package/dist/mappers/priorityMapper.js.map +1 -1
- package/dist/mappers/runComparator.d.ts +85 -0
- package/dist/mappers/runComparator.js +165 -0
- package/dist/mappers/runComparator.js.map +1 -0
- package/dist/mappers/wcagLevels.d.ts +73 -0
- package/dist/mappers/wcagLevels.js +320 -0
- package/dist/mappers/wcagLevels.js.map +1 -0
- package/dist/tools/accessibility.d.ts +1 -0
- package/dist/tools/accessibility.js +488 -63
- package/dist/tools/accessibility.js.map +1 -1
- package/dist/tools/lighthouse.js +370 -102
- package/dist/tools/lighthouse.js.map +1 -1
- package/dist/utils/batchState.d.ts +75 -0
- package/dist/utils/batchState.js +128 -0
- package/dist/utils/batchState.js.map +1 -0
- package/dist/utils/outputParsers.js +26 -30
- package/dist/utils/outputParsers.js.map +1 -1
- package/dist/utils/psiParser.d.ts +11 -0
- package/dist/utils/psiParser.js +2 -2
- package/dist/utils/psiParser.js.map +1 -1
- package/dist/utils/urlInput.d.ts +30 -0
- package/dist/utils/urlInput.js +130 -0
- package/dist/utils/urlInput.js.map +1 -0
- package/docs/manual.md +218 -7
- package/package.json +1 -1
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
|
|
56
|
-
| `run_accessibility_check` | pa11y WCAG audit. `runner: "axe"` for ARIA and design systems
|
|
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
|
-
**
|
|
115
|
-
|
|
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
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
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,
|
|
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":"AAEA,MAAM,cAAc,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAOzE
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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":"
|
|
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;
|