Public: anyone can read this; the crew can change it.
The webhooks list is keyboard-first: j/k move between rows, enter opens one #10645
Check · Review · Land · Live done — Landed and live in production.
The webhooks list now joins the shell's j/k row traversal: each webhook row on `/<owner>/<repo>/settings/hooks` carries `data-nav tabindex="-1"`.
shipped production is serving it deploy 67e5cc2
The webhooks list now joins the shell's j/k row traversal: each webhook row on /<owner>/<repo>/settings/hooks carries data-nav tabindex="-1".
What changed
src/web/pages/hooks.ts: the hook rows are built withnav: true, a one-line change. No new component class and no new script.test/keys-hooks.test.ts(new) is modelled ontest/keys-waves.test.ts. With two hooks, the page has exactly two nav rows. With none, it shows "No webhooks yet" and has no nav row. The first assertion fails without the change.
What I checked
bun x tsc --noEmit,bun test test/keys-hooks.test.tsandbun scripts/design-lint.tspass. I ranbun scripts/gate.tsbut its output was cut off, so I don't know its verdict.- I didn't list the new test in
scripts/gate.ts: I found nokeys-*entries there, so I read waves as not listed either. I didn't check how the gate picks up test files. - No change was needed to
docs/features/hotkey-hints.md, because the hint text is unchanged.
What I chose not to do
- Delivery rows nested under each hook are not marked. They are children of a hook, so j/k stays one stop per hook.
- Enter does nothing on these rows. A hook row has no link of its own, only the Pause, Send ping and Delete forms, and the client's open-focused handler clicks only an anchor. Giving rows an Enter target would need a link on each hook, which this issue doesn't ask for. Say so if you want it.
- Markup for readers without JavaScript is unchanged apart from the two inert attributes on each row.
How to try it
Open /settings/hooks on a repository you administer with two or more webhooks, then press j and k to move between them.
The branch had no commit saying how to try the change, so I added an empty "Try:" commit. The earlier pull #10478 is closed, and its branch stays as it was.
🤖 Generated with Claude Code
One-line change plus a test that fails without it; no new class or script, design principles untouched, TUI hooks screen already exists, gate lists no keys-* tests so nothing to add. Next two things: (1) give each hook row an Enter target (e.g. a link to its deliveries) so Enter does something, as the issue title promises; (2) make sure focus is visible on a row with tabindex=-1 at 360px.
The webhooks list now joins the shell's j/k row traversal: each webhook row on
/<owner>/<repo>/settings/hookscarriesdata-nav tabindex="-1".What changed
src/web/pages/hooks.ts: the hook rows are built withnav: true, a one-line change. No new component class and no new script.test/keys-hooks.test.ts(new) is modelled ontest/keys-waves.test.ts. With two hooks, the page has exactly two nav rows. With none, it shows "No webhooks yet" and has no nav row. The first assertion fails without the change.What I checked
bun x tsc --noEmit,bun test test/keys-hooks.test.tsandbun scripts/design-lint.tspass. I ranbun scripts/gate.tsbut its output was cut off, so I don't know its verdict.scripts/gate.ts: I found nokeys-*entries there, so I read waves as not listed either. I didn't check how the gate picks up test files.docs/features/hotkey-hints.md, because the hint text is unchanged.What I chose not to do
How to try it Open
/settings/hookson a repository you administer with two or more webhooks, then pressjandkto move between them.The branch had no commit saying how to try the change, so I added an empty "Try:" commit. The earlier pull #10478 is closed, and its branch stays as it was.
🤖 Generated with Claude Code
Closes #10429