ultra11y 5.39.2 → 5.40.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +2 -2
- package/.opencode/plugins/ultra11y.js +1 -1
- package/README.md +7 -0
- package/package.json +1 -1
- package/scripts/ultra11y.mjs +1 -1
- package/skills/review-a11y/SKILL.md +1 -1
- package/skills/review-a11y/scripts/ultra11y.mjs +1 -1
- package/skills/ultra11y/SKILL.md +7 -1
- package/skills/ultra11y/references/ci.md +24 -0
- package/skills/ultra11y/references/claude-code-report.md +102 -0
- package/skills/ultra11y/references/harnesses.md +5 -0
- package/skills/ultra11y/scripts/ultra11y.mjs +1 -1
- package/skills/ultra11y/templates/gitlab-ci.yml +1 -1
- package/src/types.ts +1 -1
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
{
|
|
10
10
|
"name": "ultra11y",
|
|
11
11
|
"source": "./",
|
|
12
|
-
"description": "Automatic accessibility review
|
|
13
|
-
"version": "5.
|
|
12
|
+
"description": "Automatic accessibility review before commit, push and pull request, plus detailed evidenced Markdown, HTML and per-page WCAG 2.2 AA / RGAA reports in Claude Code.",
|
|
13
|
+
"version": "5.40.0",
|
|
14
14
|
"author": { "name": "maxgfr" },
|
|
15
15
|
"homepage": "https://github.com/maxgfr/ultra11y",
|
|
16
16
|
"repository": "https://github.com/maxgfr/ultra11y",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultra11y",
|
|
3
|
-
"description": "Accessibility for WCAG 2.2 AA and country standards (RGAA…):
|
|
4
|
-
"version": "5.
|
|
3
|
+
"description": "Accessibility for WCAG 2.2 AA and country standards (RGAA…): automatic review before commit, push and pull request, plus detailed evidenced Markdown, HTML and per-page conformance reports in interactive agent sessions.",
|
|
4
|
+
"version": "5.40.0",
|
|
5
5
|
"author": { "name": "maxgfr" },
|
|
6
6
|
"homepage": "https://github.com/maxgfr/ultra11y",
|
|
7
7
|
"repository": "https://github.com/maxgfr/ultra11y",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultra11y",
|
|
3
|
-
"description": "Accessibility for WCAG 2.2 AA and country standards (RGAA…):
|
|
4
|
-
"version": "5.
|
|
3
|
+
"description": "Accessibility for WCAG 2.2 AA and country standards (RGAA…): automatic review before commit, push and pull request, plus detailed evidenced Markdown, HTML and per-page conformance reports in interactive agent sessions.",
|
|
4
|
+
"version": "5.40.0",
|
|
5
5
|
"author": { "name": "maxgfr", "url": "https://github.com/maxgfr" },
|
|
6
6
|
"homepage": "https://github.com/maxgfr/ultra11y",
|
|
7
7
|
"repository": "https://github.com/maxgfr/ultra11y",
|
|
@@ -27,7 +27,7 @@ import { fileURLToPath } from "node:url";
|
|
|
27
27
|
// Ownership marker: `ultra11y install --opencode` refuses to overwrite a plugin file that
|
|
28
28
|
// does not carry it, so a user's own ultra11y.js is never clobbered.
|
|
29
29
|
const ULTRA11Y_OPENCODE_PLUGIN = "ULTRA11Y_OPENCODE_PLUGIN";
|
|
30
|
-
const ULTRA11Y_PLUGIN_VERSION = "5.
|
|
30
|
+
const ULTRA11Y_PLUGIN_VERSION = "5.40.0";
|
|
31
31
|
|
|
32
32
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
33
33
|
|
package/README.md
CHANGED
|
@@ -523,6 +523,13 @@ node scripts/ultra11y.mjs check --report audits/wcag-YYYY-MM-DD.md # integrity
|
|
|
523
523
|
|
|
524
524
|
### A report someone will actually open
|
|
525
525
|
|
|
526
|
+
There are two deliberate publication profiles. In an interactive Claude Code audit, the skill
|
|
527
|
+
produces the detailed deliverable: adjudicated Markdown, a printable single-file HTML report,
|
|
528
|
+
per-page HTML/Markdown dossiers, screenshots and annotated evidence. In GitHub Actions,
|
|
529
|
+
`pages-report: compact` with `report`, `html` and `evidence` disabled still gates every criterion
|
|
530
|
+
on every page but uploads only the status Markdown, page JSON, source audit and verdict ledger.
|
|
531
|
+
The CI profile is a gate and handoff; it is not a second remediation report.
|
|
532
|
+
|
|
526
533
|
`--html` turns the audit into a page: `audits/index.html` as the entry point, plus — from
|
|
527
534
|
`report` — a detachable single file that prints to PDF. Self-contained — no script, no
|
|
528
535
|
external asset, nothing pointing outside the directory — and it passes this engine's own
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultra11y",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.40.0",
|
|
4
4
|
"description": "Audit HTML/CSS/JSX against WCAG 2.2 AA and produce a dated compliance report, or author/review accessible markup (native-HTML-first). A skills.sh agent skill: an install-free static engine (bundled, no npm install) plus the agent's judgment, with check/verify gates against hallucinated non-conformities, and pluggable in-repo standards packs (RGAA France first; Section 508 & EN 301 549 next).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@10.33.0",
|
package/scripts/ultra11y.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { join as join53, relative as relative6, resolve as resolve16, sep as sep
|
|
|
6
6
|
import { fileURLToPath as fileURLToPath5, pathToFileURL as pathToFileURL3 } from "url";
|
|
7
7
|
|
|
8
8
|
// src/types.ts
|
|
9
|
-
var VERSION = "5.
|
|
9
|
+
var VERSION = "5.40.0";
|
|
10
10
|
var SCHEMA_VERSION = 2;
|
|
11
11
|
var INAPPLICABLE_STATUS = "C";
|
|
12
12
|
|
|
@@ -3,7 +3,7 @@ name: review-a11y
|
|
|
3
3
|
description: "Use to REVIEW changed frontend code for accessibility: staged files, a working diff, branch, or PR; prompts such as 'review a11y', 'is this accessible?', or 'anything to fix before merge?'; and hook or CI findings on a change. Run the bundled install-free engine with cross-file JSX/TSX analysis, then adjudicate candidates and return a severity-ranked WCAG 2.2 AA review with file:line fixes, residual rendering risks, and a verdict. Use `ultra11y` instead for whole-repo audits, dated conformance reports, country standards, PRD backlogs, or authoring accessible markup."
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: 5.
|
|
6
|
+
version: 5.40.0
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# review-a11y — accessibility review of changed code
|
|
@@ -6,7 +6,7 @@ import { join as join53, relative as relative6, resolve as resolve16, sep as sep
|
|
|
6
6
|
import { fileURLToPath as fileURLToPath5, pathToFileURL as pathToFileURL3 } from "url";
|
|
7
7
|
|
|
8
8
|
// src/types.ts
|
|
9
|
-
var VERSION = "5.
|
|
9
|
+
var VERSION = "5.40.0";
|
|
10
10
|
var SCHEMA_VERSION = 2;
|
|
11
11
|
var INAPPLICABLE_STATUS = "C";
|
|
12
12
|
|
package/skills/ultra11y/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: ultra11y
|
|
|
3
3
|
description: "Use to AUDIT a repository, site, or page against WCAG 2.2 AA or a country standard such as RGAA; produce a dated conformance report, criterion grid, PRD backlog, or tickets; AUTHOR accessible markup; fix accessibility; or wire a repo gate and rendered-DOM capture pipeline. The bundled install-free engine runs 93 static checks tied to success criteria, while the agent adjudicates judgment criteria and routes rendering criteria to browser scans; check/verify reject invented non-conformities. Use `review-a11y` instead for a review scoped only to a diff, branch, or PR."
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: 5.
|
|
6
|
+
version: 5.40.0
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# ultra11y — audit WCAG 2.2 AA and write accessible markup
|
|
@@ -119,6 +119,7 @@ Domain knowledge first, then the tooling. Read the one that matches the question
|
|
|
119
119
|
| Running the tool | |
|
|
120
120
|
|---|---|
|
|
121
121
|
| `references/runbook.md` | **The reliable run**: the one recipe, the transport to use and why, and what a pass costs. Read this before paying for an adjudication |
|
|
122
|
+
| `references/claude-code-report.md` | Claude Code's detailed publication route: rendered scope, direct adjudication, adversarial verification, Markdown + HTML + per-page evidence |
|
|
122
123
|
| `references/audit.md` | The audit loop end to end, and the normative page sample |
|
|
123
124
|
| `references/judgment.md` | The adjudication + refutation worklists, verdict vocabulary, fail-closed fold |
|
|
124
125
|
| `references/verify.md` | The `check`/`verify` gates |
|
|
@@ -144,6 +145,11 @@ Domain knowledge first, then the tooling. Read the one that matches the question
|
|
|
144
145
|
|
|
145
146
|
## Choose by situation
|
|
146
147
|
|
|
148
|
+
- **"Produce a detailed audit/report in Claude Code"** → use the active Claude session as the
|
|
149
|
+
auditor, close the rendered and judgment criteria, challenge its claims, then publish the
|
|
150
|
+
dated Markdown report, printable HTML and evidenced per-page dossiers. Read
|
|
151
|
+
**`references/claude-code-report.md`**. This is the interactive publication profile; finish
|
|
152
|
+
with its full deliverable set. The compact summary is the CI branch below.
|
|
147
153
|
- **"Audit / compliance report"** → `node scripts/ultra11y.mjs audit … --json`, then
|
|
148
154
|
`report` (synthesis table + one **auditor conformance block** per NC criterion — same
|
|
149
155
|
block `prd` and `tickets` use), then `check`; read **`references/audit.md`**.
|
|
@@ -38,6 +38,30 @@ Page by page, with a real browser, in the same step:
|
|
|
38
38
|
comment-kind: pages # the page-by-page grid, under its own sticky marker
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
For an exhaustive certification run whose output must stay small, use the compact profile:
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
- uses: maxgfr/ultra11y@v5
|
|
45
|
+
with:
|
|
46
|
+
standard: rgaa
|
|
47
|
+
crawl: http://localhost:3000
|
|
48
|
+
crawl-max: '0'
|
|
49
|
+
ledger: 'true'
|
|
50
|
+
require-rendered: 'true'
|
|
51
|
+
require-decided: pages
|
|
52
|
+
undecidable-file: .ultra11y/undecidable-rgaa.json
|
|
53
|
+
report: 'false'
|
|
54
|
+
html: 'false'
|
|
55
|
+
evidence: 'false'
|
|
56
|
+
pages-report: compact
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This still gates every criterion on every captured page. Its visible summary lists the complete
|
|
60
|
+
page-by-page grid, while its artifact contains only `pages-status.md`, `pages.json`,
|
|
61
|
+
`audit-latest.json` and the portable verdict ledger. Use the detailed Claude Code route when a
|
|
62
|
+
human-readable conformance dossier is the deliverable; CI's job here is exhaustive evidence,
|
|
63
|
+
fast feedback and a clean handoff.
|
|
64
|
+
|
|
41
65
|
A page sweep is usually a **second job** — it needs a built app, a database, a browser — and
|
|
42
66
|
it can comment alongside the code gate above without either overwriting the other, because
|
|
43
67
|
each kind has its own marker. Give the two jobs distinct `artifact-name`s too: artifact names
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Detailed conformance reports in Claude Code
|
|
2
|
+
|
|
3
|
+
Use this route when the user asks Claude Code for an audit or conformance report. The active
|
|
4
|
+
Claude Code session is the auditor: it reads the criterion briefs and writes the verdicts
|
|
5
|
+
itself. It does not launch a nested `judge --runner claude` session.
|
|
6
|
+
|
|
7
|
+
The completion criterion is a **defensible deliverable**, not merely a clean static scan:
|
|
8
|
+
|
|
9
|
+
- every declared page was captured, or the missing page is named;
|
|
10
|
+
- every criterion on every captured page is `C`, `NC`, `NA`, or explicitly undecidable;
|
|
11
|
+
- every `NC` has a resolvable occurrence and every `C`/`NA` has grounded justification;
|
|
12
|
+
- the conformance report and per-page dossiers pass `check`;
|
|
13
|
+
- the user receives the paths to the Markdown report, HTML entry point, printable single file,
|
|
14
|
+
page index and machine-readable grid.
|
|
15
|
+
|
|
16
|
+
## 1. Establish the scope
|
|
17
|
+
|
|
18
|
+
Read `.ultra11yrc.json` when present. Confirm the standard, language and page sample. For a
|
|
19
|
+
country standard, prefer `sample check` plus `scan --sample`; otherwise crawl without a hidden
|
|
20
|
+
cap (`--max 0`). A source-only country-standard report is partial and must say so.
|
|
21
|
+
|
|
22
|
+
## 2. Audit source and rendered pages
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
node scripts/ultra11y.mjs audit <paths> --graph --standard <standard> --lang <lang> --out audits --json
|
|
26
|
+
node scripts/ultra11y.mjs scan --sample --runtime local --cwd . \
|
|
27
|
+
--standard <standard> --merge audits/audit-latest.json --out audits
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Use `--crawl <url> --max 0` instead of `--sample` when the project has no declared sample. A
|
|
31
|
+
rendering criterion stays undecidable when no browser measurement exists; source inspection
|
|
32
|
+
does not replace the scan.
|
|
33
|
+
|
|
34
|
+
## 3. Adjudicate directly
|
|
35
|
+
|
|
36
|
+
Generate the judgment worklist with `verify --manual`. Read each small
|
|
37
|
+
`audits/adjudicate/<criterion>.md` brief, decide against its official tests, write the verdict
|
|
38
|
+
file, then fold it with `verify --apply`. Use the orchestration route when the worklist is large,
|
|
39
|
+
but keep the final fold in the parent session.
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
node scripts/ultra11y.mjs report --in audits/audit-latest.json \
|
|
43
|
+
--standard <standard> --lang <lang> --out audits
|
|
44
|
+
node scripts/ultra11y.mjs verify --report audits/<standard>-<date>.md \
|
|
45
|
+
--in audits/audit-latest.json --manual --standard <standard> --out audits
|
|
46
|
+
node scripts/ultra11y.mjs verify --apply audits/ADJUDICATE.verdicts.json \
|
|
47
|
+
--in audits/audit-latest.json --standard <standard> --out audits
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The first report is a draft, not the final deliverable. Follow `references/judgment.md` for
|
|
51
|
+
the verdict schema and fail-closed fold.
|
|
52
|
+
|
|
53
|
+
## 4. Challenge the claims
|
|
54
|
+
|
|
55
|
+
Render the report, generate the adversarial `VERIFY.todo.json`, adjudicate every claim, apply
|
|
56
|
+
the verdicts with `--prune --ledger`, then render again. This trial covers both alleged
|
|
57
|
+
non-conformities and agent-declared conformities.
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
node scripts/ultra11y.mjs report --in audits/audit-latest.json \
|
|
61
|
+
--standard <standard> --lang <lang> --out audits
|
|
62
|
+
node scripts/ultra11y.mjs verify --report audits/<standard>-<date>.md \
|
|
63
|
+
--in audits/audit-latest.json --standard <standard> --semantic --out audits
|
|
64
|
+
node scripts/ultra11y.mjs verify --apply audits/VERIFY.todo.json \
|
|
65
|
+
--report audits/<standard>-<date>.md --in audits/audit-latest.json \
|
|
66
|
+
--standard <standard> --out audits --prune --ledger
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 5. Publish the detailed deliverable
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
node scripts/ultra11y.mjs report --in audits/audit-latest.json \
|
|
73
|
+
--standard <standard> --lang <lang> --html --evidence --out audits
|
|
74
|
+
node scripts/ultra11y.mjs pages --in audits/audit-latest.json \
|
|
75
|
+
--standard <standard> --lang <lang> --json --out audits
|
|
76
|
+
node scripts/ultra11y.mjs pages --in audits/audit-latest.json \
|
|
77
|
+
--standard <standard> --lang <lang> --format report --split page \
|
|
78
|
+
--html --evidence --out audits/pages
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This produces the dated Markdown conformance report, `audits/index.html`, the printable
|
|
82
|
+
single-file HTML report, `audits/pages.json`, and the navigable per-page Markdown/HTML dossiers
|
|
83
|
+
with screenshots and annotated evidence when snapshots support them. It is a conformance
|
|
84
|
+
deliverable; generate a PRD, remediation backlog or tickets only when the user asks for fixes.
|
|
85
|
+
|
|
86
|
+
## 6. Gate and hand over
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
node scripts/ultra11y.mjs check --report audits/<standard>-<date>.md \
|
|
90
|
+
--in audits/audit-latest.json --standard <standard>
|
|
91
|
+
node scripts/ultra11y.mjs check --in audits/audit-latest.json \
|
|
92
|
+
--standard <standard> --require-rendered
|
|
93
|
+
node scripts/ultra11y.mjs check --in audits/audit-latest.json \
|
|
94
|
+
--standard <standard> --require-decided=pages
|
|
95
|
+
node scripts/ultra11y.mjs check --report audits/pages/index.md \
|
|
96
|
+
--standard <standard>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Append `--allow-undecided .ultra11y/undecidable-<standard>.json` to the completeness gate only
|
|
100
|
+
when the project records named exceptions with reasons. Report the scope, page count, criterion
|
|
101
|
+
count, provenance tally, remaining named exceptions and every deliverable path. A failed gate
|
|
102
|
+
is part of the result and must not be summarized as a complete report.
|
|
@@ -25,6 +25,11 @@ Two things are worth knowing before the table:
|
|
|
25
25
|
The plugin carries both skills *and* the hook. `hooks/hooks.json` → `hooks/pre-tool-use.mjs`
|
|
26
26
|
→ `ultra11y hook --claude-code`. The engine resolves from `${CLAUDE_SKILL_DIR}/scripts/ultra11y.mjs`.
|
|
27
27
|
|
|
28
|
+
For a requested full audit, Claude Code follows `references/claude-code-report.md`: it acts as
|
|
29
|
+
the auditor directly, then publishes the evidenced Markdown, HTML and per-page dossiers. The
|
|
30
|
+
headless `judge --runner claude` transport is for CI or another unattended caller; nesting it
|
|
31
|
+
inside the active Claude Code session wastes context and gives the report a weaker reader.
|
|
32
|
+
|
|
28
33
|
The review arrives as `permissionDecision: "deny"` on the pending command, with the findings
|
|
29
34
|
in `additionalContext`.
|
|
30
35
|
|
|
@@ -6,7 +6,7 @@ import { join as join53, relative as relative6, resolve as resolve16, sep as sep
|
|
|
6
6
|
import { fileURLToPath as fileURLToPath5, pathToFileURL as pathToFileURL3 } from "url";
|
|
7
7
|
|
|
8
8
|
// src/types.ts
|
|
9
|
-
var VERSION = "5.
|
|
9
|
+
var VERSION = "5.40.0";
|
|
10
10
|
var SCHEMA_VERSION = 2;
|
|
11
11
|
var INAPPLICABLE_STATUS = "C";
|
|
12
12
|
|
|
@@ -27,7 +27,7 @@ variables:
|
|
|
27
27
|
ULTRA11Y_LANG: en
|
|
28
28
|
# Exact by default: a CI report must say which engine produced it. The release script keeps
|
|
29
29
|
# this pin aligned with the package version; override only for a deliberate upgrade test.
|
|
30
|
-
ULTRA11Y_VERSION: '5.
|
|
30
|
+
ULTRA11Y_VERSION: '5.40.0'
|
|
31
31
|
# Batches of 8 amortise the prompt; each accepted verdict is checkpointed before the next
|
|
32
32
|
# batch, and later passes receive only the residue.
|
|
33
33
|
ULTRA11Y_GRAIN: batch
|
package/src/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Single source of truth for shared types + the embedded version. sync-version.mjs
|
|
2
2
|
// rewrites VERSION at release time (kept in lockstep with package.json + SKILL.md).
|
|
3
|
-
export const VERSION = "5.
|
|
3
|
+
export const VERSION = "5.40.0";
|
|
4
4
|
export const SCHEMA_VERSION = 2;
|
|
5
5
|
|
|
6
6
|
// Lang = the UI FRAME's language — the `L` localization tables each module (report,
|