Skip to content

Commit 8170a4c

Browse files
Merge branch 'release-1.12.0' into LE-1749
2 parents 84bad05 + 43e7ee6 commit 8170a4c

897 files changed

Lines changed: 47452 additions & 24521 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/ibm-a11y-level1-audit/SKILL.md

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
---
22
name: ibm-a11y-level1-audit
3-
description: Audit Langflow frontend UI against IBM Equal Access Level 1 criteria, produce a compliance report, fix violations, and verify with Playwright a11y specs under src/frontend/tests/a11y. Use when the user asks for an IBM Level 1 a11y audit, Level 1 compliance report, accessibility remediation against IBM Able requirements, or to find/report/fix Level 1 WCAG issues.
3+
description: Perform a scoped IBM Equal Access Level 1 compliance audit of a chosen Langflow frontend surface (routes, components, or a PR) and produce a findings report mapped to WCAG/IBM Level 1 criteria. Default behavior is audit and report only — fixes are applied only when the user explicitly asks for remediation in the same request. Use when the user asks for an IBM Level 1 audit, a Level 1 compliance report, or to find/report Level 1 WCAG issues on a specific surface. For scanning a batch of routes without a report, see ibm-a11y-route-scan. For scanning and fixing an entire PR/branch end-to-end by default, see ibm-a11y-pr-remediation.
44
---
55

66
# IBM Accessibility Level 1 Audit
77

8-
Audit → report → fix → verify. Scope is **IBM Equal Access Toolkit v7.3 Level 1 only**. Do not expand into Level 2/3 unless the user asks.
8+
Audit → report → (fix only if asked) → verify. Scope is **IBM Equal Access Toolkit v7.3 Level 1 only**. Do not expand into Level 2/3 unless the user asks.
9+
10+
This skill's default deliverable is a **report**, not a diff. If the user wants a full scan-and-fix pass across an entire PR/branch, use `ibm-a11y-pr-remediation` instead — it is fix-by-default. This skill fixes only when the user explicitly asks for remediation of the audited surface in the same request.
911

1012
## Related skills
1113

1214
| Skill | Use for |
1315
|-------|---------|
14-
| [frontend-a11y-check](../frontend-a11y-check/SKILL.md) | How to write/run axe + IBM scans, baselines, component gotchas |
15-
| [ibm-a11y-automation](../ibm-a11y-automation/SKILL.md) | Python route scanner + Markdown/HTML report generation |
16+
| [ibm-a11y-testing-guide](../ibm-a11y-testing-guide/SKILL.md) | How to write/run axe + IBM scans, baselines, component gotchas |
17+
| [ibm-a11y-route-scan](../ibm-a11y-route-scan/SKILL.md) | Python route scanner + Markdown/HTML report generation |
18+
| [ibm-a11y-pr-remediation](../ibm-a11y-pr-remediation/SKILL.md) | Fix-by-default scan of an entire PR/branch |
1619
| [frontend-i18n](../frontend-i18n/SKILL.md) | Any new/changed accessible names or UI strings |
1720

1821
## Sources of truth
@@ -31,9 +34,9 @@ Level 1 Audit Progress:
3134
- [ ] 2. Scan (IBM + axe as applicable)
3235
- [ ] 3. Map findings to Level 1 criteria
3336
- [ ] 4. Write the report
34-
- [ ] 5. Fix violations
35-
- [ ] 6. Verify with tests/a11y
36-
- [ ] 7. Re-scan and update report status
37+
- [ ] 5. Fix violations (only if the user asked for remediation)
38+
- [ ] 6. Verify with tests/a11y (only if step 5 ran)
39+
- [ ] 7. Re-scan and update report status (only if step 5 ran)
3740
```
3841

3942
### 1. Scope the surface
@@ -48,7 +51,7 @@ Read `src/frontend/tests/a11y/README.md` and list existing specs that already co
4851

4952
### 2. Scan
5053

51-
Run **both** engines when the surface is interactive UI (see `frontend-a11y-check`):
54+
Run **both** engines when the surface is interactive UI (see `ibm-a11y-testing-guide`):
5255

5356
```bash
5457
# Playwright IBM scans (live DOM / stateful)
@@ -59,7 +62,7 @@ RUN_A11Y=true RUN_A11Y_ASSERT=true npx playwright test tests/a11y/<feature>.a11y
5962
npm run a11y:html-report --silent
6063
# → coverage/accessibility-reports/index.html
6164

62-
# Ad-hoc route batch (default-loaded page only)
65+
# Ad-hoc route batch (default-loaded page only) — see ibm-a11y-route-scan for details
6366
uv run --with playwright python scripts/a11y/a11y_scan.py \
6467
--url http://localhost:3000 \
6568
--routes-file scripts/a11y/a11y_routes.json \
@@ -89,18 +92,18 @@ Use [references/report-template.md](references/report-template.md). Deliver the
8992

9093
Required sections: Summary, Scope, Findings table, Fixes applied / proposed, Verification, Remaining risk / baselines.
9194

92-
### 5. Fix violations
95+
**Stop here by default.** List proposed fixes in the report without editing files, unless the user's request explicitly also asked for remediation (e.g. "audit and fix", "fix what you find"). If they only asked for an audit or report, do not proceed to step 5.
96+
97+
### 5. Fix violations (only when explicitly requested)
9398

94-
When this skill is invoked for audit+fix (default), fix in-scope Level 1 violations:
99+
Only continue past the report if the user's request explicitly asked for fixes alongside the audit. Otherwise stop after step 4.
95100

96101
- Prefer semantic HTML over ARIA.
97-
- Follow Langflow patterns in `frontend-a11y-check` (AG Grid, Radix `asChild`, focus restore, icon-only `aria-label`).
102+
- Follow Langflow patterns in `ibm-a11y-testing-guide` (AG Grid, Radix `asChild`, focus restore, icon-only `aria-label`).
98103
- Route new UI strings / `aria-label`s through `frontend-i18n`.
99-
- Do **not** silently disable scans. Use IBM baselines under `src/frontend/tests/a11y/baselines/` only for documented framework debt (see `frontend-a11y-check`).
104+
- Do **not** silently disable scans. Use IBM baselines under `src/frontend/tests/a11y/baselines/` only for documented framework debt (see `ibm-a11y-testing-guide`).
100105
- Keep fixes minimal; do not refactor unrelated UI.
101106

102-
If the user asked for **report only**, stop after step 4 and list proposed fixes without editing.
103-
104107
### 6. Verify with `tests/a11y`
105108

106109
Confirm path: `src/frontend/tests/a11y/`.
@@ -139,7 +142,7 @@ Scanners miss some Level 1 tasks — spot-check when relevant:
139142

140143
## Best practices (data grids + modals)
141144

142-
When auditing or fixing **settings tables** (especially `/settings/global-variables`) and similar AG Grid + modal flows, treat these as Level 1 best practices (2.1.1 / 2.4.3) — not edge-case gotchas.
145+
When auditing **settings tables** (especially `/settings/global-variables`) and similar AG Grid + modal flows, treat these as Level 1 best practices (2.1.1 / 2.4.3) — not edge-case gotchas.
143146

144147
### Selectable-row keyboard map
145148

@@ -163,10 +166,11 @@ Implementation notes:
163166
- Create modal opened from **Add New** should restore to that trigger (Radix default when a real `DialogTrigger` exists).
164167
- Verify with a Playwright keyboard test: open from a cell → Escape → `document.activeElement` is still that cell (or its `col-id`), then Enter can open again without a manual mouse re-focus.
165168

166-
For AG Grid pagination/tab traps, Radix `asChild`, and popover Esc restore details, see [frontend-a11y-check](../frontend-a11y-check/SKILL.md) (Gotchas vs Best practices sections).
169+
For AG Grid pagination/tab traps, Radix `asChild`, and popover Esc restore details, see [ibm-a11y-testing-guide](../ibm-a11y-testing-guide/SKILL.md) (Gotchas vs Best practices sections).
167170

168171
## Out of scope (unless asked)
169172

170173
- IBM Level 2/3 criteria listed as deferred in the criteria reference
171174
- Section 508 software-only rows (web UI covered via 4.1.2)
172175
- Media captions (1.2.x) when the surface has no audio/video
176+
- Fixing violations without an explicit remediation request (report only by default)
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
---
2+
name: ibm-a11y-pr-remediation
3+
description: Scan every frontend surface touched by the current PR/branch for IBM Equal Access Level 1 accessibility issues and fix all in-scope violations by default. Discovers changed files, maps them to routes/components/states, runs both axe and IBM engines, remediates until both are green (or only documented baselines remain), and reports back. Use when the user asks to check, scan, or clean up accessibility for "this PR", "my branch", or "my changes" and wants fixes applied, not just a report. For a single scoped audit report without a default fix pass, use ibm-a11y-level1-audit; for a route batch scan only, use ibm-a11y-route-scan.
4+
disable-model-invocation: true
5+
---
6+
7+
# IBM Level 1 PR Accessibility Remediation
8+
9+
Scope is **IBM Equal Access Level 1 only**. **Default mode is fix, not report-only.** Scan every frontend surface touched by the PR/branch and remediate all in-scope issues until both engines are green (or only documented baselines remain).
10+
11+
This skill is a PR-scoped orchestrator. It does not duplicate detailed engine/pattern guidance — read the linked skills for that:
12+
13+
- [ibm-a11y-testing-guide](../ibm-a11y-testing-guide/SKILL.md) — which engine/test layer to use, POUR checklist, axe-vs-IBM gaps, Radix/AG-Grid gotchas, baselines.
14+
- [ibm-a11y-route-scan](../ibm-a11y-route-scan/SKILL.md) — Python scanner options for ad-hoc route batches.
15+
- [ibm-a11y-level1-audit](../ibm-a11y-level1-audit/SKILL.md) — Level 1 criteria references and report template, useful when the user wants a formal audit report for the PR instead of (or in addition to) fixes.
16+
- [frontend-i18n](../frontend-i18n/SKILL.md) — accessible names / UI strings must go through i18n.
17+
18+
## Mandate
19+
20+
1. Diff the PR (or current branch vs its merge base) for `src/frontend/**` changes.
21+
2. Map changed files → UI surfaces → routes / components / states to scan.
22+
3. Run **both** axe (Jest where applicable) and IBM Equal Access (Playwright `page.runA11yScan` and/or `scripts/a11y/a11y_scan.py` — see `ibm-a11y-testing-guide` / `ibm-a11y-route-scan`).
23+
4. **Fix every in-scope Level 1 violation** in the changed surfaces. Do not stop at a findings list unless the user says **report only** (in that case, hand off to `ibm-a11y-level1-audit`).
24+
5. Re-scan until assert mode passes. Add/update a11y specs when coverage is missing.
25+
6. Report what changed, commands run, and any baselined/deferred debt.
26+
27+
Do **not** invent new tag names, silently disable scans, or expand into IBM Level 2/3 unless asked.
28+
29+
## Progress checklist
30+
31+
```
32+
IBM L1 PR A11y:
33+
- [ ] 1. Collect changed frontend files
34+
- [ ] 2. Map files → surfaces / routes / states
35+
- [ ] 3. Scan (IBM + axe)
36+
- [ ] 4. Fix all in-scope violations
37+
- [ ] 5. Add/update tests if needed
38+
- [ ] 6. Re-scan assert-green
39+
- [ ] 7. Report back
40+
```
41+
42+
## 1. Collect changed frontend files
43+
44+
Prefer the PR merge base when a PR exists; otherwise the branch merge base vs `main`/`master`.
45+
46+
```bash
47+
# PR number known
48+
gh pr diff <n> --name-only | grep -E '^src/frontend/' || true
49+
50+
# Current branch vs upstream default
51+
BASE=$(git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD origin/master)
52+
git diff --name-only "$BASE"...HEAD -- 'src/frontend/**'
53+
54+
# Include uncommitted work when the user is mid-change
55+
git diff --name-only HEAD -- 'src/frontend/**'
56+
git diff --name-only --cached -- 'src/frontend/**'
57+
git ls-files --others --exclude-standard 'src/frontend/**'
58+
```
59+
60+
Include:
61+
- `src/frontend/src/**/*.{tsx,ts,jsx,js,css}` (UI)
62+
- `src/frontend/tests/a11y/**` (existing coverage)
63+
- Locale files only when they change accessible names / labels
64+
65+
Skip pure non-UI churn unless it affects a11y (e.g. test helpers that change focus / ARIA). If **no** frontend files changed, say so and stop.
66+
67+
## 2. Map files → surfaces
68+
69+
For each changed file, identify:
70+
71+
| Change type | Scan target |
72+
|-------------|-------------|
73+
| Page / route | That route + meaningful states (empty/populated/modal/mobile) |
74+
| Shared component (`TableComponent`, dialogs, menus) | **Every** consumer page that uses it — not only the file you touched |
75+
| Primitive | Jest axe on the primitive + any Playwright surface that embeds it |
76+
| Spec / baseline only | Re-run that spec; no product fix unless it fails |
77+
| `a11y_routes.json` | Update static coverage; run static or route scan |
78+
79+
List interactive controls and states (default, empty, populated, open modal / menu, selected row, error, mobile). Prefer existing specs under `src/frontend/tests/a11y/`.
80+
81+
## 3. Scan (both engines must pass)
82+
83+
Automated a11y is not one tool — see `ibm-a11y-testing-guide` for the full engine comparison and gotchas. Summary:
84+
85+
- **axe-core** — Jest `axe()` (`@/utils/a11y-test`), jsdom-only.
86+
- **IBM Equal Access** — stricter on ARIA structure and keyboard semantics. Playwright `page.runA11yScan(label)` for stateful surfaces (modals/menus/selected/editing); `scripts/a11y/a11y_scan.py` for default-loaded page only.
87+
88+
```bash
89+
cd src/frontend
90+
RUN_A11Y=true RUN_A11Y_ASSERT=true npx playwright test tests/a11y/<feature>.a11y.spec.ts --project=chromium --workers=5
91+
92+
# Python scanner playwright deps are NOT in default uv sync.
93+
# One-time: uv run --with playwright playwright install chromium
94+
uv run --with playwright python scripts/a11y/a11y_scan.py \
95+
--url http://localhost:3000 \
96+
--routes /settings/<route> \
97+
--out /tmp/a11y.json --markdown /tmp/a11y.md --timeout-ms 45000
98+
```
99+
100+
`RUN_A11Y=true` runs the scan; `RUN_A11Y_ASSERT=true` fails on new violations. After changing a shared component, re-scan every page that uses it.
101+
102+
For component-only changes:
103+
104+
```bash
105+
cd src/frontend
106+
npx jest path/to/<name>.a11y.test.tsx --runInBand
107+
```
108+
109+
Do not invent findings — prefer scanner output plus manual Level 1 spot checks scanners miss (keyboard trap both ways, focus restore, 320px reflow, color-not-only).
110+
111+
## 4. Fix all in-scope Level 1 violations
112+
113+
Default: **fix**. Only list proposed fixes without editing if the user asked **report only** — then hand off to `ibm-a11y-level1-audit` for the formal report format.
114+
115+
Rules:
116+
- Prefer semantic HTML over ARIA.
117+
- Follow the Langflow patterns in `ibm-a11y-testing-guide` (AG Grid, Radix `asChild`, focus restore, icon-only `aria-label`).
118+
- Route new UI strings / `aria-label`s through i18n (`t(...)`, all locale files) per `frontend-i18n`.
119+
- Keep fixes minimal; do not refactor unrelated UI.
120+
- Do **not** silently disable scans. Use IBM baselines under `src/frontend/tests/a11y/baselines/` only for documented framework debt.
121+
- Map each issue to a Level 1 WCAG/IBM id; defer anything listed as Level 2/3 in the criteria guide (`ibm-a11y-level1-audit/references/ibm-level1-criteria.md`) unless the user expands scope.
122+
123+
### Manual Level 1 spot checks (when relevant)
124+
125+
- **2.1.1 / 2.1.2:** Tab and Shift+Tab; Escape closes overlays; no trap.
126+
- **2.4.3 / 2.4.7:** Focus order matches visual order; focus ring visible.
127+
- **1.4.10:** 320px / ~400% zoom — no essential horizontal scroll.
128+
- **1.4.1:** Status/errors not color-only.
129+
- **3.3.1 / 3.3.2:** Errors in text and tied to fields; inputs labeled.
130+
131+
## 5. Tests / coverage
132+
133+
| Surface | Spec |
134+
|---------|------|
135+
| Static routes | `static-routes.a11y.spec.ts` (+ `scripts/a11y/a11y_routes.json`) |
136+
| Auth | `auth-pages.a11y.spec.ts` |
137+
| Core pages | `core-pages.a11y.spec.ts` |
138+
| Data-rich | `files.a11y.spec.ts`, `api-keys.a11y.spec.ts`, `global-variables.a11y.spec.ts` |
139+
| Other data-rich | `data-rich-routes.a11y.spec.ts` |
140+
141+
If you fixed a state with no scan, add one (and keyboard tests for custom keyboard behavior) following `files.a11y.spec.ts` / `api-keys.a11y.spec.ts` patterns.
142+
143+
Tag every Playwright a11y test `@release` plus a domain tag (`@workspace` / `@api` / `@database` / `@components` / `@starter-projects`). Import `test`/`expect` from `../fixtures`.
144+
145+
## 6. Re-scan and report
146+
147+
Re-run the same scans with `RUN_A11Y_ASSERT=true`. Each finding → `fixed` | `baselined` | `open`.
148+
149+
When done, state:
150+
- Changed frontend files considered
151+
- Surfaces / states scanned
152+
- Fixes applied (files + what)
153+
- Commands run — whether **both** axe and IBM ran and both reported zero
154+
- Specs / baselines added or updated
155+
- States skipped and why
156+
- Remaining risk or accepted limitation

.agents/skills/ibm-a11y-automation/SKILL.md renamed to .agents/skills/ibm-a11y-route-scan/SKILL.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
2-
name: ibm-a11y-automation
3-
description: Run Langflow's local accessibility scanner script against frontend routes from src/frontend/src/routes.tsx and summarize the JSON report.
2+
name: ibm-a11y-route-scan
3+
description: Batch-scan Langflow frontend routes for accessibility issues using the Python IBM Equal Access scanner (scripts/a11y/a11y_scan.py) and produce JSON/Markdown/HTML reports. Scans the default-loaded state of each route only (use explicit state files for modals). Use when asked to scan one or more routes, produce an accessibility report for pages, or batch-check static routes. Reports findings only — does not fix code, run Playwright/axe tests, or perform a formal Level 1 audit; see ibm-a11y-testing-guide, ibm-a11y-level1-audit, and ibm-a11y-pr-remediation for those.
44
---
55

6-
# Langflow Accessibility Scanner
6+
# IBM Route Scanner
77

8-
Use this skill when asked to scan Langflow frontend pages for accessibility issues.
8+
Use this skill when asked to scan Langflow frontend pages for accessibility issues with the local Python scanner. This skill only reports — it does not modify code. For test-writing guidance, formal audits, or PR-wide fixes, see `ibm-a11y-testing-guide`, `ibm-a11y-level1-audit`, and `ibm-a11y-pr-remediation`.
99

1010
## Scanner
1111

@@ -181,4 +181,4 @@ Use report fields directly:
181181
- Do not auto-click arbitrary buttons to find modals. Use explicit state actions.
182182
- Avoid destructive modal actions unless the user explicitly asks and data is safe.
183183
- If a route has zero API requests, mention that scan quality may be limited.
184-
- Ask before fixing files unless the user explicitly asks for fixes.
184+
- This skill reports only; do not edit files. If the user also wants fixes applied, hand off to `ibm-a11y-pr-remediation` or `ibm-a11y-level1-audit`.

0 commit comments

Comments
 (0)