Skip to content

Accessibility Audit 1.2.0: crawl scope, stop and resume, results pipeline, and detection fixes - #4

Merged
HosseinKarami merged 1 commit into
mainfrom
fix/crawl-scope-and-results
Nov 2, 2026
Merged

HosseinKarami merged 1 commit into
mainfrom
fix/crawl-scope-and-results

Conversation

@HosseinKarami

Copy link
Copy Markdown
Member

Summary

Version 1.2.0. Fixes from a full audit of a large WordPress multisite with many subsites. In that audit, a third of the time went to addresses that are not pages of the site. A person had to remove 1,327 page records by hand.

The list had 23 items. Each item has a fix and a test, and each new test fails on 1.1.1 for its item. The details are in CHANGELOG.md.

The scope of the crawl (items 1 to 9)

  • permitted_domains names exact hosts. *.example.com permits subdomains. The www host is the site host.
  • A pattern in the settings can start with a host. A page of another host keeps its whole address in the results.
  • After the first load, the engine reads the final address and the status. It does not test redirects off the site, redirects to a skipped path, files, broken links, or bot challenges. They do not count in the coverage. It tests one error page. The report lists the broken links with the pages that link to them.

The discovery (items 10 to 12, 14)

  • The engine reads sitemaps to 4 levels and the WordPress API of each subsite.
  • robots.txt follows RFC 9309.
  • The settings pages come first, then the sitemap and API pages, then the links, in turn by section.

A stop and a resume (item 13)

  • Ctrl+C stops an audit and writes the results so far.
  • refact-a11y audit --resume continues the run, also after a crash.

The results pipeline (items 15 to 17)

  • refresh counts the pages again.
  • An answer stays when the page of its example goes.
  • tasks keeps to the budgets, and --limit replaces them.

The detection (items 18 to 21)

  • New AI question same-name-different-target (2.4.4).
  • A pixel check for covered text (1.4.3).
  • New AI question image-text-contrast (1.4.3): the letters of a transparent image of text against the page under them.
  • A skip link that a clip hides is measured only with the focus on it.
  • The listeners of analytics scripts and of library containers are ignored.

The install (items 22, 23)

  • The command is refact-a11y. The old name a11y still works in a project that has the package.
  • The docs never tell anyone to run npx a11y: an unrelated package on the npm registry has that name.
  • The README gives the steps for npm 12. The package is not published to a registry. Installs stay from GitHub.

Test plan

  • npm test, with six new test files: scope, discovery, stop, refresh, rules, docs.
  • The new tests on the 1.1.1 code: the checks of the items fail there.
  • Full seeded-fault detection: 74 of 74 found.
  • The new image test on two real pages of a slideshow export: two text images under 4.5:1 found, three that pass give no question.
  • A full audit of the multisite with this branch, to compare with the 1.1.1 run.

…line, and detection fixes

Fixes from a full audit of a large WordPress multisite with many subsites,
where a third of the time went to addresses that are not pages of the site.

- Scope: exact hosts in permitted_domains (*.example.com for subdomains),
  host patterns in the settings, page keys with the host for other hosts,
  and checks after the first load: redirects off site or to a skipped
  path, files, broken links (one error page tested), and bot challenges
  are not tested and do not count in the coverage.
- Discovery: sitemaps to 4 levels, the WordPress API of each subsite,
  robots.txt as RFC 9309, and the frontier by priority and by section.
- Ctrl+C stops an audit with its results; --resume continues a run that
  a stop or a crash ended.
- refresh counts the pages again, keeps answers by the hashes of all the
  items of a question, and tasks keep to the budgets (--limit).
- Detection: same-name-different-target (2.4.4), a pixel check for
  covered text, image-text-contrast (1.4.3), the focused measure of a
  clipped skip link, and no false controls from analytics scripts or
  library containers.
- The command is refact-a11y (a11y stays as an alias). The docs never
  suggest npx, and give the npm 12 steps.
- New tests: scope, discovery, stop, refresh, rules, docs.
@HosseinKarami
HosseinKarami merged commit 50788f8 into main Nov 2, 2026
1 check passed
@HosseinKarami
HosseinKarami deleted the fix/crawl-scope-and-results branch November 2, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant