Add html-proofer link-check gate (+ complementary check_a11y) (#110)#113
Merged
Conversation
… gate (#110) Content lint now has three jobs: - seo-frontmatter (existing): per-page description: policy - media-a11y: check_a11y.py --ci — source conventions html-proofer can't cover (iframe title=, <video> aria-label, lazy empty alt) - link-check: build the site + html-proofer (broken internal links/anchors, missing image alt, HTML validity; external links disabled for stability) html-proofer turned out NOT to overlap check_a11y (it permits empty alt and ignores iframe/video), so the two are complementary rather than one replacing the other. Re-framed check_a11y from "deprecated" to a kept policy gate, the a11y analogue of check_seo_frontmatter. Part of #110. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…nerated pages html-proofer found 0 broken links/anchors and 17 image issues. Resolve them: - Fix arduino/potentiometers.md video path (../electronics/assets/videos -> assets/movies, where AnalogVsDigital.mp4 actually lives). - Add advancedio/assets/.../AdafruitSTEMMAQT...mp4 (converted from the committed .mov; oled.md already referenced the .mp4). - Ignore (each tracked by an issue, not silent): stale generated nbconvert notebooks signals/*/index.html and arduino/accel.html (draft) -> #115; WIP esp32/capacitive-touch.html (missing diagrams) -> #114. Also un-deprecate scripts/README's check_a11y entry (kept as the complementary media-a11y gate). Part of #110. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…site-dev CLI array-of-regex options need each pattern wrapped in /slashes/ to be treated as a regex (a bare string is an exact-path match, so the prior patterns never matched and the WIP/generated pages weren't actually ignored). Wrap each and escape internal slashes. Also add an "Accessibility and content QA" section to website-dev.md (the two gates and what each enforces, authoring rules, and how to run html-proofer locally incl. the Windows libcurl caveat / WSL2). Part of #110. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The prior regex matched only single-level signals/<dir>/index.html and missed the standalone signals/IntroTo*.html notebooks (and 2-level gesturerec ones). Match any-depth index.html plus IntroTo*.html so the full generated-notebook set is excluded (tracked in #115). Part of #110. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Site-wide: change aux_link //makeabilitylab.cs.washington.edu to explicit https
(protocol-relative URL flagged on every page).
Broken links (wrong path / .md not resolving):
- esp32 index+tone: capacitive-touch-sensing -> capacitive-touch (page name)
- cpx/analog-input: series-parallel.md -> ../electronics/series-parallel.md
- arduino/led-on: {{baseurl}}/pages/electronics/leds.md -> ../electronics/leds.md
- advancedio/vibromotor: ../smoothing-input.md -> smoothing-input.md (same dir)
- arduino/buttons: ../electronics/serial-print -> serial-print.md (same dir)
- arduino/fast-analog-read: fix malformed [..]((url)) double-paren link
- website-dev: link .github/workflows/jekyll.yml to its GitHub URL
Stale/incorrect anchors:
- arduino/led-blink3: #blink-without-using-delays -> #blink-without-using-delay
- sensors/hall-effect: lowercase #an-improved-auto-on-nightlight-circuit
- arduino/force-sensitive-resistors: #step-1-build-the-potentiometer-based-led-dimmer
- advancedio/smoothing-input: drop trailing period in #arduino-filtering-libraries
- esp32/iot: #which-pins-can-i-use -> #adc-pins-chip-vs-board (nearest real section)
- advancedio/servo: drop nonexistent #activity-4-led-level-meter (link page instead)
Anchors verified against the built _site. Part of #110.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Stands up an off-the-shelf content-QA gate (html-proofer) alongside a slimmed
check_a11y, and fixes the pre-existing issues they surfaced. Implements the tooling direction from #110 (use industry-standard tools, not bespoke scripts).Two complementary Content lint jobs
media-a11yscripts/check_a11y.py<iframe>w/otitle=,<video>w/oaria-label, empty image altlink-checkhtml-proofer_site/#anchors, missing-alt, malformed HTMLThey don't overlap: html-proofer permits empty
alt=""and has no notion of iframe/video labels, socheck_a11ystays as the policy check for those (the a11y analogue ofcheck_seo_frontmatter). html-proofer adds broken-link/anchor checking we never had. External link checking is disabled (slow/flaky) — a candidate for a separate non-blocking job later.Baseline triage (what html-proofer found + fixes)
0 broken links within most pages, but it surfaced real pre-existing bugs, all now fixed:
arduino/potentiometers.mdvideo path; converted+added theoled.mdSTEMMA.mov→.mp4._config.ymlaux link//makeabilitylab…→ explicithttps://(was flagged on all 121 pages)..mdthat didn't resolve, stale/mis-cased#anchors, a malformed((url))). Anchors verified against the built site.Tracked debt (ignored in the gate, each tied to an issue)
--ignore-filesentries incontent-lint.yml, each annotated:signals/…→ html-proofer baseline debt: accel.md screenshot + signals notebook alt #115 (notebooks now live inmakeabilitylab/signals, Signals Lessons #116)arduino/accel.html(missing screenshot) → html-proofer baseline debt: accel.md screenshot + signals notebook alt #115esp32/capacitive-touch.html(missing 4 diagrams, you're authoring) → ESP32 capacitive-touch: add 4 missing circuit diagrams #114Docs
website-dev.mdgains an "Accessibility and content QA" section (both gates, authoring rules, and running html-proofer locally incl. the Windows libcurl caveat / WSL2).scripts/README.mdre-framescheck_a11yas the kept complementary gate.Part of #110. Closes #110's gate deliverable.