{"id":51605123,"url":"https://github.com/mgifford/wcag-spine","last_synced_at":"2026-07-12T01:30:41.619Z","repository":{"id":342406220,"uuid":"1173839693","full_name":"mgifford/wcag-spine","owner":"mgifford","description":"Visualization of WCAG 2.2 AA for automated and manual tests.","archived":false,"fork":false,"pushed_at":"2026-07-02T03:07:37.000Z","size":597,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T05:08:34.678Z","etag":null,"topics":["accessibility","automated-testing","axe-core","manual-testing","w3c","wcag"],"latest_commit_sha":null,"homepage":"https://mgifford.github.io/wcag-spine/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgifford.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-05T20:04:19.000Z","updated_at":"2026-07-02T03:07:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mgifford/wcag-spine","commit_stats":null,"previous_names":["mgifford/wcag-in-mermaid","mgifford/wcag-spine"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mgifford/wcag-spine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgifford%2Fwcag-spine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgifford%2Fwcag-spine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgifford%2Fwcag-spine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgifford%2Fwcag-spine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgifford","download_url":"https://codeload.github.com/mgifford/wcag-spine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgifford%2Fwcag-spine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35379590,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","automated-testing","axe-core","manual-testing","w3c","wcag"],"created_at":"2026-07-12T01:30:41.556Z","updated_at":"2026-07-12T01:30:41.613Z","avatar_url":"https://github.com/mgifford.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WCAG Spine\n\n\u003e An interactive GitHub Pages dashboard that visualises the \"Mirror Spine\" of\n\u003e WCAG 2.2 — bridging Responsibility (ARRM) and Technical Testing\n\u003e (ACT, Axe-core, Alfa, Trusted Tester) for every Success Criterion.\n\n[![Sync Accessibility Data](https://github.com/mgifford/wcag-spine/actions/workflows/sync_accessibility.yml/badge.svg)](https://github.com/mgifford/wcag-spine/actions/workflows/sync_accessibility.yml)\n\n---\n\n\u003e [!WARNING]\n\u003e **🚧 Experimental — AI-assisted code, not yet fully validated**\n\u003e\n\u003e The **code** for this site (HTML/CSS/JS frontend, Python data-pipeline, CI workflows,\n\u003e and documentation) was largely written with AI assistance. The **source data** — WCAG\n\u003e 2.2 Success Criteria, ACT Rules, Axe-core/Alfa rule IDs, ARRM roles, and Trusted\n\u003e Tester steps — comes directly from authoritative W3C and DHS sources (see\n\u003e [Data Sources](#data-sources-) below) and is **not** AI-generated.\n\u003e\n\u003e Automated tests (Playwright + Axe-core, Lighthouse CI, and Python unit tests) run on\n\u003e every commit and are listed in [Testing \u0026 Accessibility Audits](#testing--accessibility-audits).\n\u003e However, the full codebase has **not** yet received a comprehensive human code review,\n\u003e and real-world edge cases may not be covered. Use with appropriate caution.\n\u003e\n\u003e - Impacts may vary significantly depending on where and how the tool is implemented.\n\u003e - People with experience conducting studies on accessibility impact and the cost of\n\u003e   AI cycles should be involved in any evaluation or adoption decisions.\n\u003e - **Please provide feedback in the\n\u003e   [issue queue](https://github.com/mgifford/wcag-spine/issues)** if you have\n\u003e   positive or negative results from using this tool. Include links and references so\n\u003e   that claims can be discussed and verified.\n\n---\n\n## Live Demo \u003ca href=\"#live-demo\" aria-label=\"Link to Live Demo section\"\u003e#\u003c/a\u003e\n\n**[mgifford.github.io/wcag-spine](https://mgifford.github.io/wcag-spine)**\n\nDeep-link directly to any SC:\n\n```\nhttps://mgifford.github.io/wcag-spine/#2.4.11\n```\n\n---\n\n## What It Shows \u003ca href=\"#what-it-shows\" aria-label=\"Link to What It Shows section\"\u003e#\u003c/a\u003e\n\nFor every WCAG 2.2 Success Criterion (1.1.1 → 4.1.3) the dashboard renders a\n\"vertebra\" — a three-part view of:\n\n| Side | Content |\n|------|---------|\n| **Centre** (spine) | SC number, title, conformance level |\n| **Left** 🤖 Automation | ACT Rule IDs · Axe-core rule IDs · Alfa rule IDs |\n| **Right** 👤 Human | ARRM responsibility roles · Trusted Tester procedure steps |\n\n### Five views \u003ca href=\"#five-views\" aria-label=\"Link to Five views section\"\u003e#\u003c/a\u003e\n\n| View | Description |\n|------|-------------|\n| **Cards** | Responsive card grid — the default view |\n| **Spine** | Interactive HTML/CSS \"vertebra\" graph |\n| **Table** | Sortable/scannable data table |\n| **ACT Rules** | Browse by ACT rule ID, showing engine implementations |\n| **Coverage** | Automation coverage statistics and testing methodology |\n\n### Filters \u003ca href=\"#filters\" aria-label=\"Link to Filters section\"\u003e#\u003c/a\u003e\n\n- **Level** — A / AA / AAA\n- **Role** — filter by ARRM responsibility (e.g. *Visual Design*)\n- **Automation** — Any · Partial · Full (all 3 engines) · None (0%)\n- **Search** — free-text search on SC number or keyword\n\n---\n\n## Repository Structure \u003ca href=\"#repository-structure\" aria-label=\"Link to Repository Structure section\"\u003e#\u003c/a\u003e\n\n```\nwcag-spine/\n├── index.html                          # GitHub Pages entry point\n├── assets/\n│   ├── css/style.css                   # Dashboard styles\n│   └── js/app.js                       # Frontend logic (filtering, spine generation, routing)\n├── data/\n│   └── master_spine.json               # Merged WCAG 2.2 data (auto-updated daily)\n├── scripts/\n│   └── sync_data.py                    # Python data orchestrator\n├── testing-methods.md                  # Testing methodology \u0026 resource documentation\n├── .github/\n│   └── workflows/\n│       └── sync_accessibility.yml      # Daily sync + GitHub Pages deploy\n├── pyproject.toml                       # Python project metadata + dev dependencies (uv)\n└── requirements.txt                     # Legacy pip-compatible dev dependency list\n```\n\n\n---\n\n## Data Sources \u003ca href=\"#data-sources\" aria-label=\"Link to Data Sources section\"\u003e#\u003c/a\u003e\n\n| Source | URL | Machine-readable |\n|--------|-----|-----------------|\n| W3C ARRM (roles \u0026 tasks) | https://github.com/w3c/wai-arrm/tree/draft/_data/arrm | ✔ CSV |\n| ACT Rules Mapping (W3C GitHub) | https://github.com/w3c/wcag-act-rules/blob/main/wcag-mapping.json | ✔ JSON |\n| ACT Rules Registry (human-readable) | https://www.w3.org/WAI/standards-guidelines/act/rules/ | ✘ HTML only |\n| EARL ACT document | https://github.com/w3c/wcag-act/blob/main/earl-act.json | ✔ JSON-LD |\n| ACT Tools | https://github.com/act-rules/act-tools/ | ✔ (library) |\n| Axe-core Rules | https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md | ✘ Markdown |\n| Alfa Rules (Siteimprove) | https://github.com/siteimprove/alfa/blob/main/packages/alfa-rules/README.md | ✘ Markdown |\n| DHS Trusted Tester | https://section508.gov/test/trusted-tester/ | ✘ HTML only |\n\n---\n\n## Running the Sync Script Locally \u003ca href=\"#running-the-sync-script-locally\" aria-label=\"Link to Running the Sync Script Locally section\"\u003e#\u003c/a\u003e\n\n```bash\n# Install Python tooling (pytest, etc.) with uv\nuv sync --group dev\n\n# No third-party runtime dependencies — sync_data.py uses only the Python standard library\nuv run python scripts/sync_data.py\n```\n\nThe script:\n1. Downloads the latest ARRM CSV and ACT Rules mapping JSON from W3C / GitHub.\n2. Merges them by SC number into `data/master_spine.json`.\n3. Prints a summary of how many mappings were updated.\n\n---\n\n## master_spine.json Schema \u003ca href=\"#master_spinejson-schema\" aria-label=\"Link to master_spine.json Schema section\"\u003e#\u003c/a\u003e\n\n```json\n{\n  \"meta\": {\n    \"generated\": \"2026-03-05\",\n    \"wcag_version\": \"2.2\",\n    \"sources\": { \"...\": \"...\" }\n  },\n  \"success_criteria\": {\n    \"2.4.11\": {\n      \"title\": \"Focus Not Obscured (Minimum)\",\n      \"level\": \"AA\",\n      \"principle\": \"Operable\",\n      \"url\": \"https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html\",\n      \"automation\": {\n        \"act\":  [\"04639e\"],\n        \"axe\":  [\"focus-not-obscured\"],\n        \"alfa\": [\"SIA-R109\"]\n      },\n      \"manual\": {\n        \"roles\":    [\"UX Design\", \"Front-End Development\"],\n        \"tt_steps\": [\"2.4.11.A - Focus Visibility with Sticky Headers\", \"2.4.11.B - Focus with Overlays\"]\n      }\n    }\n  }\n}\n```\n\n---\n\n## GitHub Pages Setup \u003ca href=\"#github-pages-setup\" aria-label=\"Link to GitHub Pages Setup section\"\u003e#\u003c/a\u003e\n\n1. Go to **Settings → Pages**.\n2. Set **Source** to *GitHub Actions*.\n3. Push to `main` — the workflow deploys automatically.\n\nThe daily `sync_accessibility.yml` workflow also re-deploys after updating\n`master_spine.json`.\n\n---\n\n## Contributing \u003ca href=\"#contributing\" aria-label=\"Link to Contributing section\"\u003e#\u003c/a\u003e\n\nPull requests are welcome! To add or correct a rule mapping:\n\n1. Edit `data/master_spine.json` directly, **or**\n2. Update `scripts/sync_data.py` if the source data format changes.\n\n---\n\n## Testing \u0026 Accessibility Audits\nTo maintain our commitment to WCAG 2.2 AA, developers must run local audits:\n\n1. **Install tools**: `npm install`\n2. **Run All Audits**: `npm run test:a11y`\n   - Runs **Playwright + Axe-core** in both Light and Dark modes.\n   - Runs **Lighthouse CI** to ensure an accessibility score of 100%.\n\n---\n\n## AI Disclosure \u003ca href=\"#ai-disclosure\" aria-label=\"Link to AI Disclosure section\"\u003e#\u003c/a\u003e\n\nTransparency about AI use is a core commitment of this project. Below is a record of every AI tool\nthat has been used, and how it was used. If you contribute using an AI tool, please add it to this\ntable (see [`AGENTS.md`](AGENTS.md) for instructions).\n\n### What AI did — and did not — generate\n\nTo answer the natural question *\"which parts of this project are AI-generated?\"*:\n\n| Layer | AI-generated? | Notes |\n|-------|:---:|-------|\n| **Source data** (WCAG 2.2 SCs, ACT Rules, Axe-core/Alfa IDs, ARRM roles, Trusted Tester steps) | ❌ No | Fetched directly from authoritative W3C and DHS sources by the sync script |\n| **Data-pipeline code** (`scripts/sync_data.py`, CI workflows) | ✅ Yes | Written with AI assistance; covered by Python unit tests in `tests/` |\n| **Frontend code** (`index.html`, `assets/js/app.js`, `assets/css/style.css`) | ✅ Yes | Written with AI assistance; covered by Playwright + Axe-core + Lighthouse CI |\n| **Documentation** (`README.md`, `ACCESSIBILITY.md`, `AGENTS.md`, etc.) | ✅ Yes | Authored with AI assistance; reviewed and edited by the project maintainer |\n\n### Human review \u0026 testing\n\nThe following safeguards are in place for AI-generated code:\n\n- **Automated CI** runs on every commit: Playwright + Axe-core (0 violations required), Lighthouse CI (100% accessibility score required), and Python unit tests (`uv run python -m pytest` / `python3 -m pytest`).\n- **Daily data sync** re-runs `sync_data.py` against live W3C/DHS endpoints and redeploys; failures are visible in the [Actions tab](https://github.com/mgifford/wcag-spine/actions).\n- **Maintainer review** — all AI-generated PRs are reviewed by the project maintainer before merging.\n- **Not yet fully audited** — a comprehensive independent human code review of the full codebase has not yet been completed. Contributions and reviews are welcome via the [issue queue](https://github.com/mgifford/wcag-spine/issues).\n\n### AI tools used in development\n\n| Tool | Layer(s) affected | Role |\n|------|:---:|------|\n| **GitHub Copilot** (Coding Agent / `copilot-swe-agent`) | Frontend · Data pipeline · Documentation | Code generation, documentation authoring, PR automation, and project scaffolding throughout the build of this project |\n| **Antigravity** (AI Coding Assistant) | Frontend · Data pipeline | Removal of MermaidJS dependency; Implementation of pure HTML/CSS Spine View and data flow visualisations; Implementation of live Trusted Tester v5 scraper and data provenance source badges; Implementation of theme-aware (Light/Dark) accessibility CI/CD pipeline (Playwright + Axe-core + Lighthouse); Remediation of WCAG 2.2 AA violations (contrast, nested interactive, target-size) |\n| **Claude Sonnet** (GitHub Copilot Task Agent / `claude-sonnet-4.5`) | Data pipeline | Fixed false-positive WCAG 3.0 Recommendation check in `scripts/check_updates.py` — added `fetch_content_snippet()` helper and updated `check_wcag30()` to verify \"W3C Recommendation\" in page content rather than relying solely on HTTP 200; updated unit tests accordingly |\n| **GitHub Copilot Task Agent** | Documentation · Build tooling · Governance | Authored `DEFINITION_OF_DONE.md`; updated README cross-references and AI disclosure; migrated Python project management to `uv` via `pyproject.toml`; and updated `AGENTS.md` security requirements plus authored `SBOM.md` for dependency/version/license inventory documentation |\n\n### Runtime AI\n\n**None.** The dashboard is a fully static site. When a user opens the application, no LLM or\nAI API is called. All data is pre-built by the daily CI sync script and served as a static JSON\nfile (`data/master_spine.json`).\n\n### Browser-based AI\n\n**None.** No on-device or browser-based AI features are present. The frontend (`app.js`) does not\nload any AI SDK, call any inference endpoint, or delegate any logic to a browser AI API.\n\n---\n\n## Documentation \u003ca href=\"#documentation\" aria-label=\"Link to Documentation section\"\u003e#\u003c/a\u003e\n\n| [`testing-methods.md`](testing-methods.md) | Testing methodology, resource links, and coverage gap analysis |\n| [`ACCESSIBILITY.md`](ACCESSIBILITY.md) | Project accessibility commitments |\n| [`DEFINITION_OF_DONE.md`](DEFINITION_OF_DONE.md) | Definition of done checklist for report-quality documentation |\n| [`SBOM.md`](SBOM.md) | Software bill of materials for repository tooling, dependencies, and licenses |\n\n---\n\n## License \u003ca href=\"#license\" aria-label=\"Link to License section\"\u003e#\u003c/a\u003e\n\n[GNU Affero General Public License v3.0](LICENSE) · Data sourced from W3C (CC BY 4.0) and open-source projects. See [`SBOM.md`](SBOM.md) for component-level version and license details, including manifest metadata that differs from the repository license file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgifford%2Fwcag-spine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgifford%2Fwcag-spine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgifford%2Fwcag-spine/lists"}