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

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

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

opened this

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 with nav: true, a one-line change. No new component class and no new script.
  • test/keys-hooks.test.ts (new) is modelled on test/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.ts and bun scripts/design-lint.ts pass. I ran bun scripts/gate.ts but 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 no keys-* 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

Closes #10429

commented

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 with nav: true, a one-line change. No new component class and no new script.
  • test/keys-hooks.test.ts (new) is modelled on test/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.ts and bun scripts/design-lint.ts pass. I ran bun scripts/gate.ts but 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 no keys-* 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

Approved

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.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs