https://github.com/accesswatch/qs-proposal
Quickstart accessibility strategy, discovery action, and dashboard proposal
https://github.com/accesswatch/qs-proposal
Last synced: 10 days ago
JSON representation
Quickstart accessibility strategy, discovery action, and dashboard proposal
- Host: GitHub
- URL: https://github.com/accesswatch/qs-proposal
- Owner: accesswatch
- Created: 2026-05-27T23:13:19.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-08T14:48:59.000Z (about 2 months ago)
- Last Synced: 2026-06-08T16:26:49.310Z (about 2 months ago)
- Language: HTML
- Size: 144 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.html
Awesome Lists containing this project
README
README
body { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif; max-width: 1100px; margin: 2rem auto; padding: 0 1rem; line-height: 1.5; color: #1f2328; }
h1,h2,h3 { line-height: 1.25; }
code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
pre { background: #f6f8fa; padding: 12px; overflow-x: auto; border-radius: 6px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #d0d7de; padding: 6px 10px; text-align: left; }
th { background: #f6f8fa; }
a { color: #0969da; }
QS Proposal: Real-World Accessibility Pilot Stack
This repo is a production-style proposal package for the Quickstart team to review and run.
It includes:
- A dual-track scanning model (PR CI + live-site monitoring).
- Automated URL discovery (sitemap + crawl + Drupal/WordPress adapters).
- Pilot workflows for GLOW and Quickstart.
- Dashboard generation and publishing-ready artifacts.
- Strategic planning docs in both Markdown and HTML.
Program status note (May 2026)
This qs-proposal repo is the planning and reporting source of truth for the current remediation wave.
Latest tracked status:
- DRC reported 2026 potential issues this week via two CSV files (
Summary + Detail), totaling 346 occurrences across 10 issue IDs.
- High/medium-confidence remediation work was opened upstream in
az-digital/az_quickstart:
- PR #5639 (
accessibility-fixes-high-confidence)
- PR #5640 (
accessibility-fixes-medium-confidence)
- PR #5641 (
accessibility-fixes-button-names)
- PR #5642 (
accessibility-fixes-mobile-nav-callback)
- PR #5643 (
accessibility-fixes-carousel-aria)
- PR #5644 (
accessibility-fixes-high-confidence-round2)
- PR #5645 (
accessibility-fixes-high-confidence-round3)
- CI/workflow reliability fixes were applied where needed:
- Composer audit check now distinguishes true vulnerability failures from abandoned-package-only output.
- Carousel JS lint failures were corrected.
- Tugboat preview coverage is now available for PR #5639-#5645, including PR #5639 (
https://pr5639-qxgkrp3cc8zfunxaiz5kh7tdzpqof0tk.tugboatqa.com).
- Before/after reporting is scoped to the same URL set; projected impact remains pending post-merge verification scans.
For az-digital team members
This repository is the program operations and reporting repo for the Quickstart accessibility effort.
Use it for:
- Reviewing current remediation status, PR mapping, and rollout notes.
- Running scanner workflows and discovery workflows.
- Refreshing dashboard snapshots and leadership reporting artifacts.
Do not use it for:
- Shipping Quickstart product code changes (those belong in
az-digital/az_quickstart PRs).
- Treating projected reduction values as final closure without same-scope verification rescans.
Recommended operating flow for the az-digital team:
- Review open PR wave status (#5639-#5645) and Tugboat previews.
- Run scan workflows in non-filing mode first (
file_issues=false) for signal quality checks.
- Enable filing only for intentional remediation cycles (
file_issues=true).
- Run Dashboard Refresh after each validated cycle.
- Use refreshed snapshots for leadership readouts and weekly governance review.
Stack overview
1) Discovery layer
- Local action:
/.github/actions/discover - Sources:
-
sitemap.xmland sitemap indexes - bounded crawling from seed URLs
- optional Drupal route endpoint (
drupal_routes_url) - optional WordPress REST endpoint (
wordpress_base_url) - Output:
- scanner-ready
url_configsJSON
2) Scan layer
- Action:
github/accessibility-scanner@v3 - Scans rendered pages with Playwright + Axe-core (and optional reflow scan).
- Files issues into target repo and deduplicates with
cache_key.
3) Reporting/dashboard layer
- Dashboard app:
dashboard/index.html - Includes rule-level online help links and drill-in scenario guidance for top/repeated violations.
- Includes an Action Center with prioritized fixes, likely owner teams, likely fix areas, and one-click issue drafts.
- Action Center now groups by fixable pattern (not per-instance noise) and includes occurrence/path blast radius for actionable issue drafts.
- Includes remediation tracking deltas between snapshots and dedupe/ignore guardrails so repeated or ignored findings do not inflate executive metrics.
- Includes Validation Wins panels so rule passes/resolved rules are visible alongside failures.
- Data files:
dashboard/data/latest.jsondashboard/data/history/*.json- Refresh pipeline:
.github/workflows/dashboard-refresh.ymlscripts/update-dashboard-data.mjs
4) Proposal docs
-
QUICKSTART-ACCESSIBILITY-PLAN.md/.html -
todo.md/.html -
README.md/.html -
.github/actions/discover/README.md/.html
Workflows in this repo
Pilot scan workflow (real-world)
File: .github/workflows/pilot-scan.yml
Runs two pilot tracks:
1. Quickstart (https://quickstart.arizona.edu)
2. GLOW (https://www.letitglow.app)
Each track:
1. Discovers URLs.
2. Scans discovered URLs with github/accessibility-scanner@v3 only when file_issues=true.
3. Keeps issue filing manual-only by default (file_issues=false).
Quickstart full-sitemap rescan workflow
File: .github/workflows/quickstart-sitemap-rescan.yml
This workflow scans Quickstart using the full sitemap chunk input checked into:
- scan-input/quickstart-sitemap/chunks.json
- scan-input/quickstart-sitemap/chunk-*.json
It runs each chunk in parallel and writes a run summary with total URL and chunk counts.
PR/check-in simulation workflow
File: .github/workflows/pr-checkin-simulation.yml
This covers CI-style pre-merge behavior:
1. Runs on workflow_dispatch only.
2. Discovers URLs from a target rendered endpoint.
3. Runs scanner with non-blocking or enforced mode when file_issues=true.
4. Publishes a step summary showing target, URL count, mode, and outcome.
Default target is https://quickstart.arizona.edu, and workflow-dispatch lets you pass any preview/staging URL.
Dashboard refresh workflow
File: .github/workflows/dashboard-refresh.yml
- Pulls current issue state from
accesswatch/qs-proposal. - Recomputes summary metrics and top violations.
- Writes
dashboard/data/latest.jsonwith executive brief + drill-downs + action center + scan operations simulation. - Appends timestamped history snapshot.
- Generates static email-ready report at
dashboard/static/latest-report.html.
Configurable scan workflow (frontend/manual/admin)
File: .github/workflows/configurable-scan.yml
This workflow supports mixed operating modes from one entrypoint:
1. workflow_dispatch for frontend/manual launch requests.
2. Mode options: delta (new-issue-focused) and complete (authoritative full scan).
3. Rule profiles: focused-rules, all-rules, and axe-only.
4. Issue filing control: file_issues (default false) to prevent automatic issue creation.
5. Publishes run summary with selected combination and discovered URL count.
Required setup
Secret: GH_TOKEN
Add a fine-grained PAT as repository secret in accesswatch/qs-proposal:
- issues: write
- contents: write
- pull_requests: write
- metadata: read
- actions: write
Note: github/accessibility-scanner requires this token input.
Secret: GLOW_AUTH_CONTEXT (recommended for consent-gated scans)
Add a repository secret named GLOW_AUTH_CONTEXT containing scanner auth_context JSON so the GLOW scan can run with an accepted consent/session state.
Example shape:
{
"cookies": [
{"name":"consent","value":"true","domain":"www.letitglow.app","path":"/"}
],
"localStorage": {
"https://www.letitglow.app": {
"consentAccepted":"true"
}
}
}
Without this, many discovered URLs can redirect through /consent?next=..., which reduces scan fidelity.
Run it now
- Open Actions in
accesswatch/qs-proposal. - Run Pilot Accessibility Scan (Quickstart + GLOW) for discovery/scan readiness.
- Run PR Check-in Accessibility Simulation to test CI-style behavior.
- Run Configurable Accessibility Scan for frontend/admin mode combinations.
- Set
file_issues=trueonly when you intentionally want issue creation. - Run Dashboard Refresh.
- Open
dashboard/index.html(or publish via GitHub Pages). - Open
dashboard/static/latest-report.htmlfor email/share snapshots.
For full sitemap verification, run Quickstart Full Sitemap Rescan.
How to simulate PR flow end-to-end
- Create a short-lived branch in this repo and open a PR.
- Confirm
PR Check-in Accessibility Simulationruns automatically. - For manual simulation, run the workflow with:
-
target_url= preview/staging/live rendered endpoint -
non_blocking=truefirst, thenfalsefor gate rehearsal -
file_issues=falsefor dry-runs,trueonly for intentional filing - Review run summary + filed issues.
- Use this to tune rule thresholds and blocking policy before upstream rollout.
Pilot tuning knobs
In .github/workflows/pilot-scan.yml, adjust:
- max_depth
- max_urls
- include_domains
- exclude_url_patterns
- cache_key
- scans (["axe","reflow-scan"])
What “real world” means here
This repo now has a runnable end-to-end operating model.
The only non-repo dependencies are org permissions, secrets, and scan target reachability.
Rebuilding full sitemap chunks from a local XML file
If you have a local sitemap file (example: C:\code\data.xml), rebuild the scan input with:
node scripts/build-quickstart-sitemap-input.mjs "C:\code\data.xml" "scan-input/quickstart-sitemap" 40
This writes:
- scan-input/quickstart-sitemap/urls.txt
- scan-input/quickstart-sitemap/chunks.json
- scan-input/quickstart-sitemap/chunk-001.json ... chunk-XXX.json