Verifying wayfinder-maps

SkillWeb & browsing

Build, launch and drive wayfinder-maps to verify a change end-to-end (server + headless browser).

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Verifying wayfinder-maps skill

What this skill tells your AI

The instructions your AI receives, as published by rengwu/wayfinder-maps in .claude/skills/verify/SKILL.md and read by ahel’s review.

Build & fixture

go build -o /tmp/wayfinder-maps ./cmd/wayfinder-maps

There is no sample map in the repo. Create an effort dir with map.md + tickets/NN-slug.md. Ticket format: YAML frontmatter (type:, blocked_by: [01], claimed_by:, undermined_by: [NN]) then # Title, ## Question; a ## Answer section with prose = resolved, ## Ruled out = out_of_scope. Map format: # Name, ## Destination, and fog under ## Not yet specified as - **Title.** clears-with: NN. Sanity-check the fixture with wayfinder-maps status <effort-dir>.

Launch

PORT=78xx /tmp/wayfinder-maps serve <effort-dir>   # pick a fresh port EVERY time

Gotcha: the user often has an instance (binary wm) already listening; a bind failure only shows in the log while curl happily talks to the OLD server — check the serve log says "serving", don't trust the port being answerable.

Dev mode: WAYFINDER_DEV=cmd/wayfinder-maps/web (path to web/ from cwd) serves the frontend from disk with Cache-Control: no-store instead of the go:embed copy.

Drive (GUI surface)

Playwright's cached headless shell works without a full playwright install:

cd <scratch> && npm i playwright-core
# executablePath: ~/Library/Caches/ms-playwright/chromium_headless_shell-*/chrome-headless-shell-mac-arm64/chrome-headless-shell
  • Wait ~4s after goto: the constellation fades in over 2.2s (a plain --screenshot --virtual-time-budget capture shows HUD but NO stars — artifact, not a bug).
  • App state is inside ES modules (not on window). To click a specific star, find it by pixel colour on the canvas (frontier glow is gold) — layout is deterministic (fixed PRNG seed), so positions repeat across runs.
  • Live-reload probe: append ## Answer\ntext to a ticket while the map is open; the 1.5s poller updates the HUD counts in ~2-3s.
  • Recents on the splash come from the user's real config — don't dismiss entries.

Flows worth driving: map render (all statuses + fog + edges), click star → panel markdown, data-goto cross-ticket link, Escape closes, wheel zoom (labels thin out), back button → splash/maplist.

WebKit

npx playwright-core install webkit (~77MB, cached in ms-playwright) then require("playwright-core").webkit.launch() — no executablePath needed. Covered headlessly: full map render, the label-alpha fade workaround (capture a frame ~600ms into loadMap: labels must be dim WITH the stars, not opaque over them), touch tap via a hasTouch context, wheel zoom, panel markdown.

NOT reachable headlessly — manual Safari checklist:

  • Trackpad pinch zooms the map, not the page (gesture* events; Playwright's WebKit cannot construct GestureEvent, and Chromium never fires them).
  • Touch pan/pinch on a real iOS device or simulator.

Signals

GitHub stars
123
Forks
3
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
verify-rengwu
Source
github.com/rengwu/wayfinder-maps