Public: anyone can read this; the crew can change it.
/map nodes are named by aria-label, not an SVG <title>, and all three tests that read the <title> read the aria-label #3233
Check · Review · Land · Live done — Landed and live in production.
Each `/map` node now gets its name from an `aria-label` on the `<a class="map-node">`, and the SVG `<title>` child is gone. The five suites you listed pass (41 tests). I couldn't run `tsc --noEmit`: bun can't write to its temp dir in this sandbox, so the type check is unverified.
shipped production is serving it deploy 560f3b5
Each /map node now gets its name from an aria-label on the <a class="map-node">, and the SVG <title> child is gone. The five suites you listed pass (41 tests). I couldn't run tsc --noEmit: bun can't write to its temp dir in this sandbox, so the type check is unverified.
src/web/pages/map.ts: the label text is the same#N title — word[: by who | : why]expression as before and goes throughhtmlas before. The<a>still contains the visible title text, so the card regex in the plan-pillars test still matches.test/plan-pillars.test.ts: it reads the node'saria-labeland requires it to end with— deferred: behind the Later gate. It fails if the reason is missing.test/limbs.test.ts: it expectsaria-label="#N One home: the footer — deferred: …"instead of the<title>text.test/forge-webspec.test.ts:"title /map"is removed fromKNOWN_SIGNED_IN.
grep -rn "</title>" test/ | grep -v studio-words returns no line about the map.
I left the rest of the map page as it was.
To try it, open /<owner>/<repo>/map and inspect any node. It carries aria-label="#N …" and has no <title> child.
Each map node is now named by an aria-label on the <a>, with the SVG <title> gone. The three tests follow, and the stale known-gap entry for title /map is removed. The label still carries the visible title text, so the accessible name contains the visible name. The diff is small and has no new dependency. I could not open the preview from my sandbox (network denied), so this is judged from the diff and source, not by eye.
Two things I would do next:
- Sighted mouse users lost the hover tooltip. wrapTitle truncates long titles on the card, and the <title> was the only place to read the full title and the held/deferred reason. DESIGN.md says truncation is honest and keeps the whole text. Restore it, for example with a visually invisible <title> that is aria-hidden, or a focus/hover detail line.
- Add a test that no .map-node contains a <title> and that every node has a non-empty aria-label. Today the tests only check the deferred case.
Each
/mapnode now gets its name from anaria-labelon the<a class="map-node">, and the SVG<title>child is gone. The five suites you listed pass (41 tests). I couldn't runtsc --noEmit: bun can't write to its temp dir in this sandbox, so the type check is unverified.src/web/pages/map.ts: the label text is the same#N title — word[: by who | : why]expression as before and goes throughhtmlas before. The<a>still contains the visible title text, so the card regex in the plan-pillars test still matches.test/plan-pillars.test.ts: it reads the node'saria-labeland requires it to end with— deferred: behind the Later gate. It fails if the reason is missing.test/limbs.test.ts: it expectsaria-label="#N One home: the footer — deferred: …"instead of the<title>text.test/forge-webspec.test.ts:"title /map"is removed fromKNOWN_SIGNED_IN.grep -rn "</title>" test/ | grep -v studio-wordsreturns no line about the map.I left the rest of the map page as it was.
To try it, open
/<owner>/<repo>/mapand inspect any node. It carriesaria-label="#N …"and has no<title>child.Closes #3229