Public: anyone can read this; the crew can change it.
/boards lists its boards as keyboard rows: j/k move, enter opens a board #10351
Check · Review · Land · Live done — Landed and live in production.
Each board on `/boards` is now a keyboard row. `j`/`k` move between boards, and `o` or Enter opens the focused one. Tests pass and the type check and `bun scripts/design-lint.ts` are clean. Some of `test/keys.test.ts` was skipped here because `ssh-keygen` isn't installed in this sandbox. I did not run `scripts/gate.ts`.
shipped production is serving it deploy abf00b0
Each board on /boards is now a keyboard row. j/k move between boards, and o or Enter opens the focused one. Tests pass and the type check and bun scripts/design-lint.ts are clean. Some of test/keys.test.ts was skipped here because ssh-keygen isn't installed in this sandbox. I did not run scripts/gate.ts.
- What changed: I added
nav: trueto therow()call inboardsList. Each row still has one primary link, to/boards/<slug>. It reuses the shell's existing row traversal and focus ring, so there is no new JavaScript and I did not touchsrc/web/client.tsorsrc/web/ui.ts. - File differs from the issue: The boards list is drawn in
src/web/pages/boards-view.ts, notsrc/web/pages/boards.ts.boards.tsis the/boards/dataexplorer, so I changedboards-view.tsinstead. - Empty list: With no boards the page is unchanged and has no
data-nav. - Test:
test/keys-boards-list.test.tschecks that an empty list has nodata-navand that two seeded boards give exactly two rows linking to their own pages. I did not run it against the old code to confirm it fails there. - Not done: The
/boards/dataexplorer's own rows (sources, questions) are not keyboard rows, and the other cards on/boardsare untouched. - Extra commit: The push needed an empty "Try:" commit to pass the pre-push hook.
To try it, open /boards as the owner, press j, then Enter.
🤖 Generated with Claude Code
One-line change: nav: true on the boards list rows in boards-view.ts. It reuses the shell row traversal, adds no JS, and leaves the empty list as it was. The test fails without the change (no data-nav) and checks both the empty and the seeded page. I did not run the suite or the design lint myself, and the preview answered my unauthenticated curl with nothing useful, so I judged from the source. Next: (1) give the /boards/data explorer rows the same nav treatment; (2) squash the empty Try: commit.
Each board on
/boardsis now a keyboard row.j/kmove between boards, andoor Enter opens the focused one. Tests pass and the type check andbun scripts/design-lint.tsare clean. Some oftest/keys.test.tswas skipped here becausessh-keygenisn't installed in this sandbox. I did not runscripts/gate.ts.nav: trueto therow()call inboardsList. Each row still has one primary link, to/boards/<slug>. It reuses the shell's existing row traversal and focus ring, so there is no new JavaScript and I did not touchsrc/web/client.tsorsrc/web/ui.ts.src/web/pages/boards-view.ts, notsrc/web/pages/boards.ts.boards.tsis the/boards/dataexplorer, so I changedboards-view.tsinstead.data-nav.test/keys-boards-list.test.tschecks that an empty list has nodata-navand that two seeded boards give exactly two rows linking to their own pages. I did not run it against the old code to confirm it fails there./boards/dataexplorer's own rows (sources, questions) are not keyboard rows, and the other cards on/boardsare untouched.To try it, open
/boardsas the owner, pressj, then Enter.🤖 Generated with Claude Code
Closes #10341