docs: final handoff pass

Adds accessibility/README.md, the player-facing setup and keymap reference --
the thing to read before playtesting.

Brings the developer docs in line with what was actually built:

- docs/README.md rewritten as an index with current status and a one-paragraph
  architecture summary.
- docs/scratch.md gains a HANDOFF section: state of play, the commands to run
  after any change, the five traps that each cost real debugging time, what is
  NOT verified and why, deliberate omissions, and how to rebase onto a future
  game version.
- docs/03-implementation-plan.md gains a status banner listing where the
  implementation deliberately diverged from the plan (menu narration pulled
  forward as a blocker, levelCursorPopup not patched, tryInteract insufficient
  as a tracker filter, testbed added, no settings UI built).
- docs/04-open-questions.md gains a resolution banner: Q6 and Q8 remain open.

Also records that the testbed check count varies between runs (23-26) because
some blocks are conditional, so what matters is zero failures rather than the
total.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Accessibility Mod
2026-08-01 22:25:09 +02:00
co-authored by Claude Opus 5
parent 96ec79ed75
commit 6380998376
5 changed files with 284 additions and 15 deletions
@@ -1,5 +1,28 @@
# Implementation plan
> ## ⚠ Status: Phases 0–5 are COMPLETE.
>
> This document is the *original* plan, kept for its reasoning. Where the
> implementation diverged, the reason is recorded in
> [scratch.md](scratch.md) and [05-decisions.md](05-decisions.md).
>
> Notable divergences from what is written below:
>
> * **Phase 4 was pulled forward, partly into Phase 1's slot.** Menu narration
> turned out to be a hard blocker — the screen name was spoken but not the
> selected option, so a blind player could not start a new game at all.
> * **`levelCursorPopup` is NOT patched** (contrary to Phase 2a below). It fires
> from an animation-completion callback and lands a keypress late; the
> `ingame_observe` descriptor polls the cursor position instead.
> * **`tile.tryInteract` is not a sufficient tracker filter** (contrary to
> Phase 3 below). `wall` carries a flavour-only `tryInteractFunction`.
> See the D4 correction in `05-decisions.md`.
> * **A code-driven testbed was added** (`accessibility/testbed.lua`), not in the
> original plan. It found five real bugs that would otherwise have surfaced
> only during play.
> * **Phase 5's mod-settings screen was not built.** Settings exist as fields in
> the relevant modules and are not yet exposed at runtime.
Phases are ordered so each one is independently playable-and-testable. Nothing later is required for something earlier to be useful.
---