@mcptoolshop/accessibility-suite 0.1.0 → 0.2.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/.a11y_artifacts_test/evidence.json +52 -0
- package/.a11y_artifacts_test/gate-result.json +41 -0
- package/.a11y_artifacts_test/report.txt +19 -0
- package/.github/actions/a11y-ci/action.yml +106 -0
- package/.github/workflows/a11y-gate.yml +112 -0
- package/.github/workflows/ci.yml +68 -3
- package/.github/workflows/test-a11y-action.yml +93 -0
- package/.github/workflows/update-baseline.yml +49 -0
- package/.github/workflows/verify-docs.yml +26 -0
- package/CHANGELOG.md +33 -0
- package/GETTING_STARTED.md +87 -0
- package/HANDBOOK.md +747 -0
- package/README.md +202 -23
- package/assets/a11y-logo.png +0 -0
- package/docs/handbooks/A11Y-ASSIST.md +31 -0
- package/docs/handbooks/A11Y-CI.md +71 -0
- package/docs/handbooks/A11Y-DEMO-SITE.md +29 -0
- package/docs/handbooks/A11Y-EVIDENCE-ENGINE.md +31 -0
- package/docs/handbooks/A11Y-LINT.md +62 -0
- package/docs/handbooks/A11Y-MCP-TOOLS.md +34 -0
- package/docs/handbooks/ACCESSIBILITY-SUITE.md +51 -0
- package/docs/handbooks/ALLY-DEMO-PYTHON.md +23 -0
- package/docs/handbooks/COMMON-CONCEPTS.md +24 -0
- package/docs/handbooks/CURSORASSIST.md +18 -0
- package/docs/handbooks/README.md +20 -0
- package/docs/prov-spec/SETUP.md +1 -1
- package/docs/rules.md +132 -0
- package/docs/unified-artifacts.md +52 -0
- package/logo.png +0 -0
- package/package.json +1 -1
- package/pipelines/templates/a11y-ci.yml +135 -0
- package/pipelines/test-a11y-ci-template.yml +36 -0
- package/scripts/verify_handbooks.py +97 -0
- package/src/a11y-assist/README.md +5 -0
- package/src/a11y-ci/.a11y_artifacts_test/current.scorecard.json +11 -0
- package/src/a11y-ci/.a11y_artifacts_test/evidence.json +52 -0
- package/src/a11y-ci/.a11y_artifacts_test/gate-result.json +41 -0
- package/src/a11y-ci/.a11y_artifacts_test/report.txt +19 -0
- package/src/a11y-ci/README.md +83 -23
- package/src/a11y-ci/a11y_ci/allowlist.py +52 -9
- package/src/a11y-ci/a11y_ci/cli.py +143 -46
- package/src/a11y-ci/a11y_ci/error_ids.py +17 -0
- package/src/a11y-ci/a11y_ci/gate.py +83 -48
- package/src/a11y-ci/a11y_ci/help.py +119 -0
- package/src/a11y-ci/a11y_ci/mcp_payload.py +124 -0
- package/src/a11y-ci/a11y_ci/pr_comment.py +127 -0
- package/src/a11y-ci/a11y_ci/report.py +137 -0
- package/src/a11y-ci/a11y_ci/schema/scorecard.schema.json +89 -0
- package/src/a11y-ci/a11y_ci/schemas/allowlist.schema.json +11 -2
- package/src/a11y-ci/a11y_ci/scorecard.py +86 -30
- package/src/a11y-ci/a11y_ci/severity.py +29 -0
- package/src/a11y-ci/npm/README.md +47 -0
- package/src/a11y-ci/npm/package.json +1 -1
- package/src/a11y-ci/tests/fixtures/allowlist_expired.json +2 -1
- package/src/a11y-ci/tests/fixtures/allowlist_ok.json +2 -1
- package/src/a11y-ci/tests/fixtures/baseline_ok.json +17 -4
- package/src/a11y-ci/tests/fixtures/current_fail.json +10 -3
- package/src/a11y-ci/tests/fixtures/current_failures_many.json +11 -0
- package/src/a11y-ci/tests/fixtures/current_ok.json +10 -3
- package/src/a11y-ci/tests/fixtures/current_regresses.json +15 -4
- package/src/a11y-ci/tests/test_allowlist_v2.py +97 -0
- package/src/a11y-ci/tests/test_gate.py +3 -3
- package/src/a11y-ci/tests/test_mcp_cli.py +80 -0
- package/src/a11y-ci/tests/test_mcp_payload.py +76 -0
- package/src/a11y-ci/tests/test_polish.py +83 -0
- package/src/a11y-ci/tests/test_pr_comment.py +103 -0
- package/src/a11y-ci/tests/test_rule_help.py +70 -0
- package/src/a11y-ci/tests/test_schema_validation.py +36 -0
- package/src/a11y-ci/tests/test_scorecard_canonical.py +88 -0
- package/src/a11y-ci/tests/test_smoke_cli.py +41 -0
- package/src/a11y-evidence-engine/README.md +5 -0
- package/src/a11y-lint/README.md +5 -0
- package/src/a11y-lint/a11y_lint/cli.py +29 -0
- package/src/a11y-mcp-tools/README.md +5 -0
- package/tools/ado/a11y-ci.ps1 +195 -0
package/README.md
CHANGED
|
@@ -1,37 +1,216 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="logo.png" width="200" alt="accessibility-suite">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">accessibility-suite</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Six tools. One mission: make accessibility testing verifiable, automated, and hard to ignore.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://github.com/mcp-tool-shop-org/accessibility-suite/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="License: MIT"></a>
|
|
13
|
+
<a href="https://mcptoolshop.com"><img src="https://img.shields.io/badge/part%20of-MCP%20Tool%20Shop-black" alt="Part of MCP Tool Shop"></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## At a Glance
|
|
19
|
+
|
|
20
|
+
Most accessibility tools stop at "you have 12 violations." The Accessibility Suite goes further: it captures tamper-evident evidence of what was tested, gates your CI pipeline on regressions, and surfaces fix guidance tuned for low-vision, screen-reader, dyslexia, and cognitive-load profiles.
|
|
21
|
+
|
|
22
|
+
The suite spans the full lifecycle -- lint CLI output for accessible patterns, scan HTML for WCAG violations with cryptographic provenance, enforce quality gates in CI, and expose everything through MCP so AI assistants can participate in the remediation loop.
|
|
23
|
+
|
|
24
|
+
**Key principles:**
|
|
25
|
+
|
|
26
|
+
- **Evidence over assertions** -- every finding is backed by a prov-spec provenance record with SHA-256 integrity digests
|
|
27
|
+
- **Low-vision-first output** -- all CLI tools use the `[OK]/[WARN]/[FAIL] + What/Why/Fix` contract
|
|
28
|
+
- **Deterministic** -- same input always produces identical output; no network calls, no randomness
|
|
29
|
+
- **CI-native** -- exit codes, scorecard JSON, and PR comments designed for automated pipelines
|
|
30
|
+
|
|
31
|
+
---
|
|
4
32
|
|
|
5
33
|
## Projects
|
|
6
34
|
|
|
7
|
-
| Project | Description |
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
35
|
+
| Project | Description | Stack | Package |
|
|
36
|
+
|---------|-------------|-------|---------|
|
|
37
|
+
| [a11y-lint](src/a11y-lint/) | Accessibility linter for CLI output -- validates error messages follow accessible patterns | Python 3.10+ | [PyPI](https://pypi.org/project/a11y-lint/) |
|
|
38
|
+
| [a11y-ci](src/a11y-ci/) | CI gate for accessibility scorecards with regression detection and allowlists | Python 3.10+ | [PyPI](https://pypi.org/project/a11y-ci/) / [npm](https://www.npmjs.com/package/@mcptoolshop/a11y-ci) |
|
|
39
|
+
| [a11y-assist](src/a11y-assist/) | Low-vision-first CLI assistant with five accessibility profiles | Python 3.10+ | [PyPI](https://pypi.org/project/a11y-assist/) |
|
|
40
|
+
| [a11y-evidence-engine](src/a11y-evidence-engine/) | Headless HTML scanner with prov-spec provenance records | Node.js 18+ | [npm](https://www.npmjs.com/package/@mcptoolshop/a11y-evidence-engine) |
|
|
41
|
+
| [a11y-mcp-tools](src/a11y-mcp-tools/) | MCP server for accessibility evidence capture and diagnosis | Node.js 18+ | [npm](https://www.npmjs.com/package/@mcptoolshop/a11y-mcp-tools) |
|
|
42
|
+
| [a11y-demo-site](examples/a11y-demo-site/) | Demo site with intentional violations for end-to-end testing | HTML | -- |
|
|
43
|
+
|
|
44
|
+
---
|
|
16
45
|
|
|
17
46
|
## Quick Start
|
|
18
47
|
|
|
48
|
+
### Lint CLI output for accessible patterns
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install a11y-lint
|
|
52
|
+
a11y-lint scan output.txt
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Gate your CI on accessibility regressions
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install a11y-ci
|
|
59
|
+
a11y-lint scan . --artifact-dir .a11y_artifacts
|
|
60
|
+
a11y-ci gate --artifact-dir .a11y_artifacts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Scan HTML and capture provenance
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install -g @mcptoolshop/a11y-evidence-engine
|
|
67
|
+
a11y-engine scan ./html --out ./results
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Get fix guidance for a CLI failure
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install a11y-assist
|
|
74
|
+
a11y-assist explain --json error.json --profile screen-reader
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Capture evidence and diagnose via MCP
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm install -g @mcptoolshop/a11y-mcp-tools
|
|
81
|
+
a11y evidence --target page.html --dom-snapshot --out evidence.json
|
|
82
|
+
a11y diagnose --bundle evidence.json --verify-provenance --fix
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Run the demo site end-to-end
|
|
86
|
+
|
|
19
87
|
```bash
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
88
|
+
cd examples/a11y-demo-site
|
|
89
|
+
./scripts/a11y.sh
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Architecture
|
|
95
|
+
|
|
96
|
+
The six tools form a pipeline from detection through remediation:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
CLI output HTML files
|
|
100
|
+
| |
|
|
101
|
+
+-------v-------+ +--------v---------+
|
|
102
|
+
| a11y-lint | | a11y-evidence- |
|
|
103
|
+
| (scan & score)| | engine (scan + |
|
|
104
|
+
+-------+-------+ | provenance) |
|
|
105
|
+
| +--------+---------+
|
|
106
|
+
scorecard.json |
|
|
107
|
+
| evidence bundle
|
|
108
|
+
+-------v-------+ |
|
|
109
|
+
| a11y-ci | +---------v---------+
|
|
110
|
+
| (CI gate + | | a11y-mcp-tools |
|
|
111
|
+
| PR comment) | | (MCP evidence + |
|
|
112
|
+
+-------+-------+ | diagnosis) |
|
|
113
|
+
| +---------+---------+
|
|
114
|
+
pass / fail |
|
|
115
|
+
| findings + fixes
|
|
116
|
+
+-------v-------+ |
|
|
117
|
+
| a11y-assist |<----------------+
|
|
118
|
+
| (fix guidance |
|
|
119
|
+
| 5 profiles) |
|
|
120
|
+
+---------------+
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Data flow:**
|
|
124
|
+
|
|
125
|
+
1. **a11y-lint** scans CLI text for accessible error message patterns and produces a scorecard
|
|
126
|
+
2. **a11y-evidence-engine** scans HTML files and emits findings with prov-spec provenance records
|
|
127
|
+
3. **a11y-ci** consumes scorecards, enforces thresholds, detects regressions, and generates PR comments
|
|
128
|
+
4. **a11y-mcp-tools** wraps evidence capture and diagnosis as MCP tools for AI assistant integration
|
|
129
|
+
5. **a11y-assist** takes findings (structured JSON or raw text) and generates fix guidance in five accessibility profiles
|
|
130
|
+
6. **a11y-demo-site** ties it all together as a runnable example with intentional violations
|
|
131
|
+
|
|
132
|
+
**Shared contracts:**
|
|
133
|
+
|
|
134
|
+
- `cli.error.schema.v0.1.json` -- structured error format across all Python tools
|
|
135
|
+
- `evidence.bundle.schema.v0.1.json` -- evidence bundles with provenance chains
|
|
136
|
+
- `.a11y_artifacts/` -- unified artifact directory for CI pipelines
|
|
137
|
+
- prov-spec method IDs -- stable, versioned identifiers for every provenance step
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## MCP Client Configuration
|
|
142
|
+
|
|
143
|
+
To connect a11y-mcp-tools to your MCP client (Claude Desktop, Cursor, VS Code, etc.):
|
|
23
144
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
a11y
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"mcpServers": {
|
|
148
|
+
"a11y": {
|
|
149
|
+
"command": "npx",
|
|
150
|
+
"args": ["-y", "@mcptoolshop/a11y-mcp-tools"]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Or if installed globally:
|
|
28
157
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"mcpServers": {
|
|
161
|
+
"a11y": {
|
|
162
|
+
"command": "a11y-mcp"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
33
166
|
```
|
|
34
167
|
|
|
168
|
+
The server exposes two tools:
|
|
169
|
+
|
|
170
|
+
| Tool | Description |
|
|
171
|
+
|------|-------------|
|
|
172
|
+
| `a11y.evidence` | Capture tamper-evident evidence bundles from HTML, CLI logs, or other inputs |
|
|
173
|
+
| `a11y.diagnose` | Run WCAG rule checks over evidence bundles with provenance verification |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## CI Integration (GitHub Actions)
|
|
178
|
+
|
|
179
|
+
```yaml
|
|
180
|
+
jobs:
|
|
181
|
+
accessibility:
|
|
182
|
+
runs-on: ubuntu-latest
|
|
183
|
+
steps:
|
|
184
|
+
- uses: actions/checkout@v4
|
|
185
|
+
|
|
186
|
+
- name: Scan code
|
|
187
|
+
run: |
|
|
188
|
+
pip install a11y-lint
|
|
189
|
+
mkdir .a11y_artifacts
|
|
190
|
+
a11y-lint scan . --artifact-dir .a11y_artifacts
|
|
191
|
+
|
|
192
|
+
- uses: mcp-tool-shop-org/accessibility-suite/.github/actions/a11y-ci@main
|
|
193
|
+
with:
|
|
194
|
+
artifact-dir: .a11y_artifacts
|
|
195
|
+
fail-on: serious
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
See [GETTING_STARTED.md](GETTING_STARTED.md) for Azure DevOps examples and troubleshooting.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Documentation
|
|
203
|
+
|
|
204
|
+
| Document | Description |
|
|
205
|
+
|----------|-------------|
|
|
206
|
+
| [HANDBOOK.md](HANDBOOK.md) | Architecture deep dive, integration patterns, and development guide |
|
|
207
|
+
| [GETTING_STARTED.md](GETTING_STARTED.md) | Three-command local setup, CI templates, and troubleshooting |
|
|
208
|
+
| [CHANGELOG.md](CHANGELOG.md) | Release history in Keep a Changelog format |
|
|
209
|
+
| [docs/unified-artifacts.md](docs/unified-artifacts.md) | Unified artifact directory strategy |
|
|
210
|
+
| [docs/prov-spec/](docs/prov-spec/) | Provenance specification |
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
35
214
|
## License
|
|
36
215
|
|
|
37
|
-
MIT
|
|
216
|
+
[MIT](LICENSE)
|
|
Binary file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# a11y-assist Handbook
|
|
2
|
+
|
|
3
|
+
Deterministic assistance for fixing accessibility failures. Think: “given a known failure signature, suggest safe remediation steps.”
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
pip install -e src/a11y-assist
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
a11y-assist help --rule "aria-required"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Output**
|
|
18
|
+
* Markdown remediation guide (stdout)
|
|
19
|
+
|
|
20
|
+
## How it fits
|
|
21
|
+
|
|
22
|
+
* `a11y-ci` tells you what failed and links to `docs/hints`
|
|
23
|
+
* `a11y-assist` can turn that into guided remediation (rules-based, deterministic)
|
|
24
|
+
|
|
25
|
+
## Recommended workflow
|
|
26
|
+
|
|
27
|
+
1. Run `a11y-ci gate` and inspect `report.txt`
|
|
28
|
+
2. Use `help_url` / `help_hint` fields to locate the rule
|
|
29
|
+
3. Use `a11y-assist` for structured guidance (when available)
|
|
30
|
+
|
|
31
|
+
**(More detail to be added once CLI is confirmed)**
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# a11y-ci Handbook
|
|
2
|
+
|
|
3
|
+
The policy gate. It turns findings into a pass/fail decision, detects regressions, supports waivers, and produces evidence + PR comments.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
pip install -e src/a11y-ci
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
a11y-ci gate --artifact-dir .a11y_artifacts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Output**
|
|
18
|
+
* `.a11y_artifacts/gate-result.json`
|
|
19
|
+
* `.a11y_artifacts/report.txt`
|
|
20
|
+
* `.a11y_artifacts/evidence.json`
|
|
21
|
+
|
|
22
|
+
**Common Failures**
|
|
23
|
+
* `A11Y.CI.Schema.Invalid` (Exit 2): Scorecard JSON is mangled
|
|
24
|
+
* `A11Y.CI.Gate.Failed` (Exit 3): Open violations found
|
|
25
|
+
|
|
26
|
+
## Options
|
|
27
|
+
|
|
28
|
+
### Set the severity threshold
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
a11y-ci gate --artifact-dir .a11y_artifacts --fail-on serious
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Use a baseline
|
|
35
|
+
If `.a11y_artifacts/baseline.scorecard.json` exists, it is automatically used (unless overridden).
|
|
36
|
+
|
|
37
|
+
### Use an allowlist (waivers)
|
|
38
|
+
If `.a11y_artifacts/allowlist.json` exists, it is automatically used.
|
|
39
|
+
|
|
40
|
+
**Allowlist supports:**
|
|
41
|
+
* `owner` (required)
|
|
42
|
+
* `expires` (required)
|
|
43
|
+
* `ticket` (optional)
|
|
44
|
+
* suppression identity via `id` or `fingerprint` (best)
|
|
45
|
+
|
|
46
|
+
## Output formats
|
|
47
|
+
|
|
48
|
+
### Human report
|
|
49
|
+
`.a11y_artifacts/report.txt` is optimized for quick reading and low-vision clarity.
|
|
50
|
+
|
|
51
|
+
### Machine report
|
|
52
|
+
`.a11y_artifacts/gate-result.json` is stable and parseable.
|
|
53
|
+
|
|
54
|
+
### Evidence bundle (MCP)
|
|
55
|
+
`.a11y_artifacts/evidence.json` includes traceability metadata + hashes.
|
|
56
|
+
|
|
57
|
+
### PR comments
|
|
58
|
+
Generate from evidence (recommended):
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
a11y-ci comment --mcp .a11y_artifacts/evidence.json --platform github --top 10 > .a11y_artifacts/comment.md
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Error IDs and exit codes
|
|
65
|
+
|
|
66
|
+
* `0`: PASS
|
|
67
|
+
* `2`: Input error (schema, missing required file, etc.)
|
|
68
|
+
* `3`: Gate failed (policy violation / regression / expired waiver)
|
|
69
|
+
* `1`: Internal tool error
|
|
70
|
+
|
|
71
|
+
Error IDs are standardized (grep-friendly). If you see an error, copy the ID into issues/PR discussions.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# a11y-demo-site Handbook
|
|
2
|
+
|
|
3
|
+
An end-to-end demo details page.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
npm install
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
npm run dev
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Output**
|
|
18
|
+
* Localhost demo URL (e.g. `http://localhost:3000`)
|
|
19
|
+
|
|
20
|
+
## What this is
|
|
21
|
+
|
|
22
|
+
* See how evidence is generated
|
|
23
|
+
* See how gates fail/pass
|
|
24
|
+
* See PR comments
|
|
25
|
+
|
|
26
|
+
## How to use it
|
|
27
|
+
|
|
28
|
+
* Use it as the “golden tutorial”
|
|
29
|
+
* Use it to validate new workflows or rules without touching production repos
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# a11y-evidence-engine Handbook
|
|
2
|
+
|
|
3
|
+
A headless engine that generates traceable, structured accessibility evidence (often beyond “a list of findings”), suitable for audits and verification.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
pip install -e src/a11y-evidence-engine
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
(Pending CLI finalization)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Output**
|
|
18
|
+
* Screenshots (`.png`)
|
|
19
|
+
* DOM snapshots (`.html`)
|
|
20
|
+
* `.a11y_artifacts/evidence-manifest.json`
|
|
21
|
+
|
|
22
|
+
## Where it fits
|
|
23
|
+
|
|
24
|
+
* `a11y-lint`: findings
|
|
25
|
+
* `a11y-ci`: policy + regression + waivers
|
|
26
|
+
* `a11y-evidence-engine`: traceable “proof artifacts” (screenshots, DOM snapshots), depending on what it supports
|
|
27
|
+
|
|
28
|
+
## Best practice
|
|
29
|
+
|
|
30
|
+
* Store evidence artifacts under `.a11y_artifacts/` (or a subfolder like `.a11y_artifacts/evidence/`)
|
|
31
|
+
* Reference them from `evidence.json` so everything is linked and hashable
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# a11y-lint Handbook
|
|
2
|
+
|
|
3
|
+
The scanner/linter that produces accessibility findings and writes the canonical scorecard used by `a11y-ci`.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
pip install -e src/a11y-lint
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
a11y-lint scan docs --artifact-dir .a11y_artifacts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Output**
|
|
18
|
+
* `.a11y_artifacts/current.scorecard.json`
|
|
19
|
+
* `.a11y_artifacts/result.json`
|
|
20
|
+
|
|
21
|
+
**Common Failures**
|
|
22
|
+
* `A11Y.SCAN.IO`: Input path does not exist
|
|
23
|
+
* `A11Y.SCAN.SCHEMA`: Output directory not writable
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
**Source-of-truth:** Lives in `accessibility-suite` (standalone `a11y-lint` repo may be deprecated).
|
|
28
|
+
**Recommended dev install:** Editable install from monorepo (e.g., `pip install -e src/a11y-lint`).
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### Standard mode (recommended)
|
|
33
|
+
|
|
34
|
+
Writes outputs to `.a11y_artifacts/`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
a11y-lint scan --artifact-dir .a11y_artifacts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Expected outputs:**
|
|
41
|
+
* `.a11y_artifacts/current.scorecard.json`
|
|
42
|
+
* `.a11y_artifacts/result.json`
|
|
43
|
+
|
|
44
|
+
### Using a custom output directory
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
a11y-lint scan --artifact-dir path/to/output
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Output: scorecard schema
|
|
51
|
+
|
|
52
|
+
`current.scorecard.json` follows the locked schema:
|
|
53
|
+
|
|
54
|
+
* required `meta` object (tool, version)
|
|
55
|
+
* required `findings[]`
|
|
56
|
+
* each finding: `id`, `severity`, `message` (+ optional `location`)
|
|
57
|
+
|
|
58
|
+
## Troubleshooting
|
|
59
|
+
|
|
60
|
+
If `a11y-ci` rejects your scorecard, validate that you’re writing:
|
|
61
|
+
* `meta.tool`, `meta.version`
|
|
62
|
+
* `findings[].id`, `findings[].severity`, `findings[].message`
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# a11y-mcp-tools Handbook
|
|
2
|
+
|
|
3
|
+
An MCP server/tooling layer for capturing and transporting accessibility evidence bundles.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Install**
|
|
8
|
+
```bash
|
|
9
|
+
pip install -e src/a11y-mcp-tools
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Run**
|
|
13
|
+
```bash
|
|
14
|
+
mcp-server-a11y --evidence-dir .a11y_artifacts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Input**
|
|
18
|
+
* `.a11y_artifacts/evidence.json`
|
|
19
|
+
|
|
20
|
+
**Output**
|
|
21
|
+
* MCP Resources (`a11y://evidence/...`)
|
|
22
|
+
* MCP Prompts
|
|
23
|
+
|
|
24
|
+
## Integration model
|
|
25
|
+
|
|
26
|
+
Treat `evidence.json` as the “source packet”:
|
|
27
|
+
* Store, index, or attach it to PR build artifacts
|
|
28
|
+
* **Prefer hash-verified artifacts** (`a11y-ci` includes SHA256 hashes)
|
|
29
|
+
|
|
30
|
+
## In practice
|
|
31
|
+
|
|
32
|
+
Most teams:
|
|
33
|
+
1. upload `.a11y_artifacts/` as CI artifacts
|
|
34
|
+
2. optionally forward `evidence.json` to MCP tools for aggregation
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Accessibility Suite Handbook
|
|
2
|
+
|
|
3
|
+
This is the authoritative source for the entire suite. Most “standalone” repos are migrated here.
|
|
4
|
+
|
|
5
|
+
**Handbooks track main. For released versions, refer to tagged docs.**
|
|
6
|
+
|
|
7
|
+
**Also see:**
|
|
8
|
+
* [Universal Concepts](COMMON-CONCEPTS.md)
|
|
9
|
+
* [a11y-lint](A11Y-LINT.md)
|
|
10
|
+
* [a11y-ci](A11Y-CI.md)
|
|
11
|
+
* [a11y-mcp-tools](A11Y-MCP-TOOLS.md)
|
|
12
|
+
* [a11y-assist](A11Y-ASSIST.md)
|
|
13
|
+
* [a11y-evidence-engine](A11Y-EVIDENCE-ENGINE.md)
|
|
14
|
+
* [a11y-demo-site](A11Y-DEMO-SITE.md)
|
|
15
|
+
* [ally-demo-python](ALLY-DEMO-PYTHON.md)
|
|
16
|
+
* [CursorAssist](CURSORASSIST.md)
|
|
17
|
+
|
|
18
|
+
## Install (developer)
|
|
19
|
+
|
|
20
|
+
Typical dev loop:
|
|
21
|
+
|
|
22
|
+
1. Clone `mcp-tool-shop-org/accessibility-suite`
|
|
23
|
+
2. Install tool packages from `src/…` (editable installs are preferred)
|
|
24
|
+
|
|
25
|
+
If your tools are Python packages (likely for `a11y-ci`, `a11y-lint`):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Install per-package from monorepo
|
|
29
|
+
pip install -e src/<tool>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Run (suite convention)
|
|
33
|
+
|
|
34
|
+
From the repo root:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
a11y-lint scan --artifact-dir .a11y_artifacts
|
|
38
|
+
a11y-ci gate --artifact-dir .a11y_artifacts
|
|
39
|
+
a11y-ci comment --mcp .a11y_artifacts/evidence.json --platform github > .a11y_artifacts/comment.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## CI
|
|
43
|
+
|
|
44
|
+
* **GitHub Actions:** `.github/workflows/a11y-gate.yml`
|
|
45
|
+
* **Baseline update:** `.github/workflows/update-baseline.yml`
|
|
46
|
+
* **Golden integration tests:** `.github/workflows/test-a11y-action.yml`
|
|
47
|
+
|
|
48
|
+
## Where to add docs
|
|
49
|
+
|
|
50
|
+
* **Suite-wide conventions:** `docs/unified-artifacts.md`
|
|
51
|
+
* **Rule remediation index:** `docs/rules.md`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ally-demo-python Handbook
|
|
2
|
+
|
|
3
|
+
A reference integration for Python showing how to consume or integrate the toolchain (“Ally” stack).
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Run**
|
|
8
|
+
```bash
|
|
9
|
+
python examples/integrate_gate.py
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Output**
|
|
13
|
+
* Console logs demonstrating API usage
|
|
14
|
+
* `.a11y_artifacts/` generated by example calls
|
|
15
|
+
|
|
16
|
+
## Typical use
|
|
17
|
+
|
|
18
|
+
Learn how to integrate:
|
|
19
|
+
|
|
20
|
+
* scorecard generation
|
|
21
|
+
* gate execution
|
|
22
|
+
* evidence bundling
|
|
23
|
+
* parsing the `gate-result.json`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Common Concepts
|
|
2
|
+
|
|
3
|
+
## The Golden Folder: `.a11y_artifacts/`
|
|
4
|
+
|
|
5
|
+
All tools agree on a shared artifact directory:
|
|
6
|
+
|
|
7
|
+
```plaintext
|
|
8
|
+
.a11y_artifacts/
|
|
9
|
+
current.scorecard.json # produced by a11y-lint (or scanners)
|
|
10
|
+
baseline.scorecard.json # optional, stored/managed by CI baseline workflow
|
|
11
|
+
allowlist.json # optional, expiring suppressions (waivers)
|
|
12
|
+
gate-result.json # produced by a11y-ci (structured report)
|
|
13
|
+
report.txt # produced by a11y-ci (human report)
|
|
14
|
+
evidence.json # produced by a11y-ci (MCP evidence bundle)
|
|
15
|
+
comment.md # produced by a11y-ci (PR comment markdown)
|
|
16
|
+
result.json # produced by a11y-lint (scanner result details)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Typical pipeline flow
|
|
20
|
+
|
|
21
|
+
1. **Scan** → `a11y-lint` writes `current.scorecard.json`
|
|
22
|
+
2. **Gate** → `a11y-ci` gate reads it, compares baseline/allowlist, emits reports
|
|
23
|
+
3. **Evidence** → `evidence.json` is produced for traceability/MCP
|
|
24
|
+
4. **Comment** → `comment.md` generated for PR systems (GitHub/ADO)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# CursorAssist Handbook
|
|
2
|
+
|
|
3
|
+
Assistive cursor control and UI benchmarking. It’s adjacent to accessibility, but it’s more in the “motor assistance + UX measurement” lane.
|
|
4
|
+
|
|
5
|
+
## Quickstart
|
|
6
|
+
|
|
7
|
+
**Run**
|
|
8
|
+
```bash
|
|
9
|
+
cursor-assist --monitor
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**Output**
|
|
13
|
+
* Cursor metrics CSV
|
|
14
|
+
|
|
15
|
+
## How it fits
|
|
16
|
+
|
|
17
|
+
* Can produce usability evidence/benchmarks that complement strict WCAG-style findings.
|
|
18
|
+
* If it emits structured outputs, it can be wrapped into `.a11y_artifacts/` as an additional evidence source.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Accessibility Suite Handbooks
|
|
2
|
+
|
|
3
|
+
These handbooks are the authoritative documentation for the Accessibility Suite. The monorepo is the source of truth for all tools.
|
|
4
|
+
|
|
5
|
+
**Standalone repos contain redirects only.**
|
|
6
|
+
|
|
7
|
+
## Start Here
|
|
8
|
+
* [Universal Concepts](COMMON-CONCEPTS.md) - **Read this first.** Explains `.a11y_artifacts`, the pipeline flow, and shared conventions.
|
|
9
|
+
|
|
10
|
+
## Core Toolchain
|
|
11
|
+
1. [a11y-lint](A11Y-LINT.md) - The scanner.
|
|
12
|
+
2. [a11y-ci](A11Y-CI.md) - The policy gate.
|
|
13
|
+
3. [a11y-mcp-tools](A11Y-MCP-TOOLS.md) - The integration layer.
|
|
14
|
+
|
|
15
|
+
## Reference & Ecosystem
|
|
16
|
+
* [a11y-assist](A11Y-ASSIST.md)
|
|
17
|
+
* [a11y-evidence-engine](A11Y-EVIDENCE-ENGINE.md)
|
|
18
|
+
* [a11y-demo-site](A11Y-DEMO-SITE.md)
|
|
19
|
+
* [ally-demo-python](ALLY-DEMO-PYTHON.md)
|
|
20
|
+
* [CursorAssist](CURSORASSIST.md)
|
package/docs/prov-spec/SETUP.md
CHANGED