Public: anyone can read this; the crew can change it.
The map's issues are keyboard rows: j/k move between them, enter opens the issue #10359
Check · Review · Land · Live done — Landed and live in production.
The "Ready now" and "Blocked on" issue rows on a repository's map (`/:owner/:name/map`) now join the shell's `j`/`k` traversal; `o` or Enter opens the issue. The change is one line, `nav: true` on the `rankedList` rows in `src/web/pages/map.ts`. There's no new JavaScript, and `src/web/client.ts` and `src/web/ui.ts` are untouched.
shipped production is serving it deploy abf00b0
The "Ready now" and "Blocked on" issue rows on a repository's map (/:owner/:name/map) now join the shell's j/k traversal; o or Enter opens the issue. The change is one line, nav: true on the rankedList rows in src/web/pages/map.ts. There's no new JavaScript, and src/web/client.ts and src/web/ui.ts are untouched.
What I checked
test/keys-map.test.tsfails without the change. With the change it passes: the seeded map hasdata-navlinks to the issue's own page, each withtabindex="-1", and a repo with no issues has nodata-navat all.test/keys.test.ts,test/help-keys.test.tsandtest/map-page-timing.test.tspass. 10 tests across those files were skipped.bun x tsc --noEmitis clean, andbun scripts/design-lint.tsis clean.- I did not run the full suite. I did not try the keys in a browser.
What I left out
- Issue links in other lists: the by-pillar list, the roadmap's "Needs you" and issue rows, and the global
/maplanes and "Next" list are not keyboard rows. The pillar list and the roadmap rows sit inside folded<details>, soj/kwould land on rows nobody can see. - Roadmap and "Needs you" rows: these are single-link rows and could take
navsafely, butsrc/web/pages/roadmap.tsisn't in this issue's file list. Say so if you want them added. - The "First" form: where the row has a "First" button, its form sits inside the row's link. That was already the case, and I left it as it was.
Try it: open any repository's /map, press j to focus a ready issue, then Enter.
The pre-push hook wanted a "Try:" commit, so the branch has an empty one.
🤖 Generated with Claude Code
The map's ready and blocked issue rows are now keyboard rows: j/k move between them and Enter opens the selected issue. The change is nav: true on the ranked rows in src/web/pages/map.ts, plus test/keys-map.test.ts.
I couldn't fix either failure the check reported, because neither comes from this change:
- "each page stays inside its first-view budget" (
test/attention.test.ts): this test arrived onmainafter I branched. It fails onorigin/mainitself: the repository and app pages are over their word and block budgets (197 words against 189, 29 blocks against 28). I mergedmaininto the branch and left the budget alone. Someone needs to fixmainor the budget. - "previews of idle pulls sleep" (
test/apps-idle.test.ts): it passes when run alone, so I treated it as a timing flake under load in the full run. It touches nothing the map change reaches.
On the merged branch, bun x tsc --noEmit is clean and test/keys-map.test.ts and test/apps-idle.test.ts pass (5 tests). I didn't run scripts/gate.ts or the full suite here. test/map-layout-budget.test.ts timed out once (5 s limit) when I ran it with two other test files, and I didn't re-run it alone.
To try it: open /alice/busy/map, press j, then Enter on an issue row.
One line, nav: true on the ranked rows in rankedList, which is the pattern row() already offers. No new JS, no change to the shell's keys, and an empty list still renders the plain <p>. The test seeds a blocked pair and asserts the rows and the empty page.
Two things I would do next:
- Where a writer sees the
Firstbutton, the<form>sits inside the row's<a>. That is invalid nesting and a Tab stop inside a j/k row. It was already so, but the row is now a keyboard row, so move the button out of the link (useafter). - Tighten the test: assert exactly one
data-navper rendered row (the issue says one per row, the test says at least 2), and add a writer case that checks the First form still posts.
The "Ready now" and "Blocked on" issue rows on a repository's map (
/:owner/:name/map) now join the shell'sj/ktraversal;oor Enter opens the issue. The change is one line,nav: trueon therankedListrows insrc/web/pages/map.ts. There's no new JavaScript, andsrc/web/client.tsandsrc/web/ui.tsare untouched.What I checked
test/keys-map.test.tsfails without the change. With the change it passes: the seeded map hasdata-navlinks to the issue's own page, each withtabindex="-1", and a repo with no issues has nodata-navat all.test/keys.test.ts,test/help-keys.test.tsandtest/map-page-timing.test.tspass. 10 tests across those files were skipped.bun x tsc --noEmitis clean, andbun scripts/design-lint.tsis clean.What I left out
/maplanes and "Next" list are not keyboard rows. The pillar list and the roadmap rows sit inside folded<details>, soj/kwould land on rows nobody can see.navsafely, butsrc/web/pages/roadmap.tsisn't in this issue's file list. Say so if you want them added.Try it: open any repository's
/map, pressjto focus a ready issue, then Enter.The pre-push hook wanted a "Try:" commit, so the branch has an empty one.
🤖 Generated with Claude Code
Closes #10342