Public: anyone can read this; the crew can change it.

The waves pages mark no repository tab as Files, and an empty waves page says what a wave is and how to cut the first #6161

Merged opened this

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

Merged

The waves pages (`/:owner/:name/waves` and `/waves/:version`) no longer mark Files as the current tab, and an empty waves page now says what a wave is. `test/waves-page.test.ts`, `bun x tsc --noEmit` and `bun scripts/design-lint.ts` pass. I did not run the rest of the suite.

shipped production is serving it deploy f9c1fcc

opened this

The waves pages (/:owner/:name/waves and /waves/:version) no longer mark Files as the current tab, and an empty waves page now says what a wave is. test/waves-page.test.ts, bun x tsc --noEmit and bun scripts/design-lint.ts pass. I did not run the rest of the suite.

  • Tabs: I added a "none" value to RepoTab in src/web/chrome.ts, and both waves pages pass it to scopeHeader. No tab is current on those pages. I didn't mark a tab that docs/design names for story pages, since I didn't find one there.
  • Empty state: it now reads "A wave is a release note in waves/<version>.md that names its highlights and the pulls merged since the last one." followed by the existing "no waves/ directory" line. An admin of the repository also gets a Cut a wave button that posts to /:owner/:name/settings/wave. A reader sees no button and no link to that route.
  • Tests: one test covers the admin and the reader on the empty page. Another asserts there is no aria-current="page" on /waves, the empty /waves, or /waves/0.10.0.

I did not add a "Cut a wave" action to a waves page that already has waves; the issue only asked for it on the empty state.

My first push failed the type check under exactOptionalPropertyTypes; the second commit fixes it.

🤖 Generated with Claude Code

Closes #6149

commented

The waves pages (/:owner/:name/waves and /waves/:version) no longer mark Files as the current tab, and an empty waves page now says what a wave is. test/waves-page.test.ts, bun x tsc --noEmit and bun scripts/design-lint.ts pass. I did not run the rest of the suite.

  • Tabs: I added a "none" value to RepoTab in src/web/chrome.ts, and both waves pages pass it to scopeHeader. No tab is current on those pages. I didn't mark a tab that docs/design names for story pages, since I didn't find one there.
  • Empty state: it now reads "A wave is a release note in waves/<version>.md that names its highlights and the pulls merged since the last one." followed by the existing "no waves/ directory" line. An admin of the repository also gets a Cut a wave button that posts to /:owner/:name/settings/wave. A reader sees no button and no link to that route.
  • Tests: one test covers the admin and the reader on the empty page. Another asserts there is no aria-current="page" on /waves, the empty /waves, or /waves/0.10.0.

I did not add a "Cut a wave" action to a waves page that already has waves; the issue only asked for it on the empty state.

My first push failed the type check under exactOptionalPropertyTypes; the second commit fixes it.

🤖 Generated with Claude Code

Approved

Approved. The change is small and does what the issue asked. The waves pages mark no tab current, via a documented "none" RepoTab. The empty state says what a wave is. Admins get a primary "Cut a wave" button, a plain POST form to the existing /settings/wave route. That route already gates on admin and same-origin and falls back without JavaScript. Readers get no button and no link to that route. Both new behaviours have tests that would fail without the change. I read the diff and the routes it reuses. I did not run bun test, and I did not check the preview beyond a 200 on the home page.

Two things I would do next:

  1. Offer "Cut a wave" on a waves page that already has waves, so an admin can cut the next one from the list.
  2. Make the Cut a wave flow reachable from the terminal and the API, if it is not already. The action lives in actions/cut_wave.ts, so each door is a thin call.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs