Skip to content

Add expert level to The Accessibility Nightmare - #94

Open
sindurigf wants to merge 3 commits into
off-on-dev:mainfrom
sindurigf:feat/accessibility-nightmare-expert
Open

sindurigf wants to merge 3 commits into
off-on-dev:mainfrom
sindurigf:feat/accessibility-nightmare-expert

Conversation

@sindurigf

Copy link
Copy Markdown
Contributor

The Compliance Engine asks why a gate that has been green for months never caught the barrier the company is being audited over. The answer is in two parts: it only ever scanned one of the four pages a customer passes through, and the fault it was meant to find is behavioural, so no amount of scanning would have reached it.

Players extend scanner coverage, discover that doing so finds nothing, diagnose the silence with a virtual screen reader, repair the routing, and produce a compliance report that records what each check proved.

Verification plants a fault on the payment page and requires the scan to go red, so coverage is measured rather than assumed — a suite that stays green never opened that page.

Adds check_playwright_tests_detect to lib/scripts/node.sh, which asserts a tagged suite fails. Purely additive; no existing caller changes.

Also removes the rewards block from the adventure index, as the adventure has no rewards.

What does this PR do?

Closes #

Type of PR

  • 💡 Adventure Idea
  • 🗺️ New Adventure Level
  • 📖 Solution Walkthrough
  • 🐛 Bug fix / 📝 Documentation improvement / Other

💡 Adventure Idea

  • Idea file is placed in ideas/ (not ideas/.implemented/)

🗺️ New Adventure Level

  • Devcontainer tested from scratch in a new Codespace
  • verify.sh passes when the challenge is solved
  • verify.sh fails with helpful error messages when not solved
  • Docs complete: story, objectives, hints, no spoilers
  • All links in docs work
  • Idea file moved to ideas/.implemented/ (first level PR only)
  • Tracking issue linked above (Part of # for earlier levels, Closes # for the last one)

📖 Solution Walkthrough

  • External link (blog post, video, etc.) — linked from the adventure's solutions page
  • In-repo markdown (adventures/XX-.../docs/solutions/level.md)
  • The challenge deadline has passed
  • Walkthrough explains why things work, not just what to do

📝 Other

  • Commits are focused and minimal
  • Documentation updated if needed

sindurigf and others added 3 commits September 19, 2026 21:43
The Compliance Engine asks why a gate that has been green for months
never caught the barrier the company is being audited over. The answer
is in two parts: it only ever scanned one of the four pages a customer
passes through, and the fault it was meant to find is behavioural, so
no amount of scanning would have reached it.

Players extend scanner coverage, discover that doing so finds nothing,
diagnose the silence with a virtual screen reader, repair the routing,
and produce a compliance report that records what each check proved.

Verification plants a fault on the payment page and requires the scan
to go red, so coverage is measured rather than assumed — a suite that
stays green never opened that page.

Adds check_playwright_tests_detect to lib/scripts/node.sh, which asserts
a tagged suite fails. Purely additive; no existing caller changes.

Also removes the rewards block from the adventure index, as the
adventure has no rewards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: sindurigf <sinduri.g@gmail.com>
Check 3 plants a fault in the payment page and requires the player's
scan to catch it. Three ways that could go wrong:

The recovery that undoes a crashed probe lived inside the branch taken
only when the scan was already green, so a run killed mid-probe left the
planted fault in place and then failed check 2 — for exactly the player
who had widened their scan to reach that page. Recovery now runs before
any check, and self-heals.

The trap was armed before the backup was known good, so a short write
could leave a truncated backup that the handler then moved over the
original. The backup is now compared byte for byte before it is relied
on, and the handler chains loader.sh's own cleanup rather than replacing
it.

The inverted check treated any non-zero exit as "fault caught", so
Ctrl-C scored a pass and the run carried on. Only exit code 1, a real
test failure, counts now; anything else reports that the check could not
be measured.

Also: drop the python3 dependency the prerequisite check never declared,
resolve the report path against the vite server root rather than cwd,
read test outcomes after retries rather than from the first attempt,
ignore the probe backup, add set -e to the devcontainer scripts to match
the sibling levels, and stop pointing players at a localhost URL that
does not resolve in a Codespace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: sindurigf <sinduri.g@gmail.com>
A cold read of the docs and the reference page found the defect
identifiable before the player ran anything, which leaves objective 2
with nothing to find.

The reference table paired "the document has a title" with "route
change announces the new page" as two halves of one criterion, and
highlighted both. That was the sharpest statement of the lesson and also
the answer, printed before any investigation. The row is now the fault
class rather than this app's instance of it, and the highlight is gone.

The WCAG links named the two criteria outright; they now point at the
guideline and at the quick reference, so the player still has somewhere
to look but has to work out which criterion their tests verify.

Two smaller tells removed: the listen-panel instructions said to read
what does not arrive after the marker, and the @transition hint said to
watch what arrives after the address changes. Both named the conclusion.
They now describe how to read the panel and leave the judgement open.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: sindurigf <sinduri.g@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant