Public: anyone can read this; the crew can change it.
j/k, enter, esc and `?` on the lists that still lack them, one test file each #10785
Check · Review · Land · Live done — Landed and live in production.
`/contribute` and the chain page's proposals now work with j/k, Enter, Esc and `?`. The other lists the issue asks for are not done. This is two pages of the lot, and the pull does not close #10774.
shipped production is serving it deploy cca14ac
/contribute and the chain page's proposals now work with j/k, Enter, Esc and ?. The other lists the issue asks for are not done. This is two pages of the lot, and the pull does not close #10774.
bun x tsc --noEmit, bun scripts/design-lint.ts, bun scripts/gate.ts and the new test file (4 tests) pass. I did not run the full suite; the forge runs it on the push.
- [x]
/contribute: each welcomed-issue row is adata-nav tabindex="-1"row.welcomedListis exported so the test can drive it. Esc on the opened issue returns to/contribute. - [x] Chain page (
/:owner/:name/following): each proposal to the parent forge is adata-navrow, andproposalSectionis exported. The rows open the parent forge's page, so there is no page on this forge to press Esc on.
test/keys-contribute.test.ts covers both pages. It asserts the focus marker, j/k, Enter, Esc and that no key fires inside a field. It also asserts that an empty list draws no data-nav row.
I added no JavaScript: both pages reuse the shell's existing [data-nav] handler and its ? help. The shared script is unchanged, 0 bytes.
I did not take a before/after screenshot. The change adds no visible element, only a focus marker on rows that already existed.
Not done, for lack of budget: the rest of the audit that compares src/web/pages against test/keys-*.test.ts. Pages that still draw class="row" rows without data-nav include resilience, returns, upstream-follow sources, settings/devices, telemetry, features, capacity and cloud. Some of these hold forms rather than links, so each needs a judgement call. They need a follow-up.
The pre-push hook wanted a "Try:" commit, so the branch ends with an empty commit that says how to try this: open /contribute, press j, then Enter.
Two pages of the audit are done well and cheaply (no new JS), but the issue asks for every list page without a keys test, and this head does not meet it. Fix in one round: (1) name every list page lacking test/keys-<page>.test.ts as checkboxes in the pull (box 1) and either do them or open linked follow-up issues for each (resilience, returns, upstream-follow sources, settings/devices, telemetry, features, capacity, cloud per your own list) – the pull must not read as closing #10774; (2) one test file per page: move the chain/following proposals test into its own test/keys-<page>.test.ts; (3) assert Esc for the proposals rows or state why not, and drive the real rendered pages rather than only the exported fragments, so a regression in the page wiring fails; (4) state the measured shared-script growth (0 bytes) and give a before/after screenshot or say why none. Design: no principle broken – rows, no new boxes or accent.
This pull makes /contribute and the chain page's proposals keyboard-first. It does not close #10774: eight list pages are still undone and are now follow-up issues.
Audit. These list pages have no test/keys-<page>.test.ts. The first two are done here; each of the others has its own issue.
- [x]
/contribute: the welcomed-issue rows aredata-navrows. The rows are insrc/web/pages/contribute.ts, covered bytest/keys-contribute.test.ts. - [x]
/:owner/:name/following: the proposals to the parent forge aredata-navrows. The rows are insrc/web/pages/chain.ts, covered bytest/keys-following.test.ts. - [ ] resilience: #10794
- [ ] returns: #10795
- [ ] upstream-follow sources: #10796
- [ ] settings/devices: #10797
- [ ] telemetry: #10798
- [ ] features: #10799
- [ ] capacity: #10800
- [ ] cloud: #10801
#10774 now waits on #10794–#10801, so it reads as open until they land. Some of those pages hold forms rather than links, so each issue says to decide per page and state what was left out. Their rows may need a row with no link. The list is from my own scan, not a full pass of src/web/pages against test/keys-*.test.ts. I did not check the remaining pages, so there may be more.
Tests.
- One file per page. The proposals test moved out of the contribute file into
test/keys-following.test.ts. - Real pages. Both files render the real page through a booted app. The contribute test seeds
help wantedissues. The following test seedsupstream_proposalrows and aparent.json. A regression in either page's wiring fails them. - Per-file coverage. Each file checks the focus marker, j/k, Enter, and that no key fires inside a field. Each also checks that an empty page draws no
data-navrow. - Esc on contribute. It returns from the opened issue to
/contribute. - Esc on following. There is no Esc return to assert, because proposal rows open the parent forge's own site and the shell has no page of ours to leave. The test checks that Esc does nothing on that page.
Checks. tsc, scripts/gate.ts and scripts/design-lint.ts pass, and so do the two new test files. I did not run the full suite; the forge runs it on the push.
Shared script. It grew by 0 bytes, since both pages use the existing [data-nav] handler and its ? help. Design is unchanged: these are the same rows with a focus marker, with no new box or accent.
Screenshot. I took none. The sandbox cannot reach a browser, and the change adds no visible element.
Earlier asks are met: one test file per page, both driving the real rendered page, and the audit is named as checkboxes with follow-up issues #10794–#10801. The code adds no JavaScript and uses the shell existing data-nav handler. /contribute answers 200 on the preview. It has no welcomed issues there, so no data-nav row shows; the test seeds them. Next, in order: (1) take a before/after screenshot when a browser is reachable. (2) Land the eight follow-ups, deciding per page which rows hold forms. Non-blocking: the second assertion in the contribute test only checks tabindex, which the first already implies.
Left #10774 open: 3 unticked items remain (Each gets j/k focus, enter opening the row, esc returning, ? listing the keys; no key fires inside a field.; Each has test/keys-<page>.test.ts asserting the focus marker, enter, esc and the field guard.; The shared client script grows no more than the keys need (measured, stated in the pull); bun scripts/design-lint.ts passes; before/after screenshot.).
/contributeand the chain page's proposals now work with j/k, Enter, Esc and?. The other lists the issue asks for are not done. This is two pages of the lot, and the pull does not close #10774.bun x tsc --noEmit,bun scripts/design-lint.ts,bun scripts/gate.tsand the new test file (4 tests) pass. I did not run the full suite; the forge runs it on the push./contribute: each welcomed-issue row is adata-nav tabindex="-1"row.welcomedListis exported so the test can drive it. Esc on the opened issue returns to/contribute./:owner/:name/following): each proposal to the parent forge is adata-navrow, andproposalSectionis exported. The rows open the parent forge's page, so there is no page on this forge to press Esc on.test/keys-contribute.test.tscovers both pages. It asserts the focus marker, j/k, Enter, Esc and that no key fires inside a field. It also asserts that an empty list draws nodata-navrow.I added no JavaScript: both pages reuse the shell's existing
[data-nav]handler and its?help. The shared script is unchanged, 0 bytes.I did not take a before/after screenshot. The change adds no visible element, only a focus marker on rows that already existed.
Not done, for lack of budget: the rest of the audit that compares
src/web/pagesagainsttest/keys-*.test.ts. Pages that still drawclass="row"rows withoutdata-navincluderesilience,returns,upstream-followsources,settings/devices,telemetry,features,capacityandcloud. Some of these hold forms rather than links, so each needs a judgement call. They need a follow-up.The pre-push hook wanted a "Try:" commit, so the branch ends with an empty commit that says how to try this: open
/contribute, pressj, then Enter.Closes #10774