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

A wave opens as headline, then its changes, then each change's pull, one fold each, and the page says how far its milestone is #11292

Merged opened this

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

Merged

A wave page now opens as headline, then a progress line, then its changes as closed folds that each hold their pulls. The MCP `waves` card shows the same progress line. `tsc`, the design lint, `test/mcp-size.test.ts` and the neighbouring wave and MCP tests pass. The new test file passes too. The forge's full check hasn't run yet.

shipped production is serving it deploy f21b126

opened this

A wave page now opens as headline, then a progress line, then its changes as closed folds that each hold their pulls. The MCP waves card shows the same progress line. tsc, the design lint, test/mcp-size.test.ts and the neighbouring wave and MCP tests pass. The new test file passes too. The forge's full check hasn't run yet.

What changed

  • Change: I took a "change" to be a milestone the wave moved, because the wave file has no mapping from a highlight to a pull and a milestone does.
  • Progress line: it reads "Faster pages: 1 of 2 done". When a wave moved several milestones it shows the one with the most issues beneath it, which is a call I made. A wave that moved none renders no progress line at all.
  • Folds: each moved milestone is a closed <details> row under "Moved", holding the wave's pulls that fed it plus a link to the milestone. It works with JavaScript off, and a closed fold takes the same height before and after.
  • Unchanged: the Highlights and the full Pulls list below are as they were, as are the existing "Moved" heading and its tests. The pulls under the folds are a repeat of that list.
  • Moved to src/story/wave_moved.ts: the "N of M done" wording, waveProgress, and pullsByMilestone, which says which pull moved which milestone. movedForViewer is unchanged in what it returns; a new movedWithPulls adds the pull numbers. The page, the MCP tool and the card all use these, so the words stay the same everywhere.
  • MCP waves with a version: the answer gains an optional progress string, and the card gets a "Progress" row. No new tool was added.
  • Test: test/wave-folds.test.ts renders a wave with two changes and asserts the order headline, progress, fold 1, fold 2. It also checks that each fold holds only its own pull, that a wave with no milestone has no progress line or folds, and that the MCP answer and card match the page.

What I chose not to do

  • I did not map highlights to pulls; that needs a wave-file format change.
  • I did not touch the wave list page or the atom feed.

How to try it: open /<owner>/<repo>/waves/<version> for a wave whose pulls closed issues under a milestone, then open a change. The waves MCP tool with a version returns the same line as progress.

The pre-push hook wanted a "Try:" commit, so there is an empty one for that.

Closes #11234

commented

A wave page now opens as headline, then a progress line, then its changes as closed folds that each hold their pulls. The MCP waves card shows the same progress line. tsc, the design lint, test/mcp-size.test.ts and the neighbouring wave and MCP tests pass. The new test file passes too. The forge's full check hasn't run yet.

What changed

  • Change: I took a "change" to be a milestone the wave moved, because the wave file has no mapping from a highlight to a pull and a milestone does.
  • Progress line: it reads "Faster pages: 1 of 2 done". When a wave moved several milestones it shows the one with the most issues beneath it, which is a call I made. A wave that moved none renders no progress line at all.
  • Folds: each moved milestone is a closed <details> row under "Moved", holding the wave's pulls that fed it plus a link to the milestone. It works with JavaScript off, and a closed fold takes the same height before and after.
  • Unchanged: the Highlights and the full Pulls list below are as they were, as are the existing "Moved" heading and its tests. The pulls under the folds are a repeat of that list.
  • Moved to src/story/wave_moved.ts: the "N of M done" wording, waveProgress, and pullsByMilestone, which says which pull moved which milestone. movedForViewer is unchanged in what it returns; a new movedWithPulls adds the pull numbers. The page, the MCP tool and the card all use these, so the words stay the same everywhere.
  • MCP waves with a version: the answer gains an optional progress string, and the card gets a "Progress" row. No new tool was added.
  • Test: test/wave-folds.test.ts renders a wave with two changes and asserts the order headline, progress, fold 1, fold 2. It also checks that each fold holds only its own pull, that a wave with no milestone has no progress line or folds, and that the MCP answer and card match the page.

What I chose not to do

  • I did not map highlights to pulls; that needs a wave-file format change.
  • I did not touch the wave list page or the atom feed.

How to try it: open /<owner>/<repo>/waves/<version> for a wave whose pulls closed issues under a milestone, then open a change. The waves MCP tool with a version returns the same line as progress.

The pre-push hook wanted a "Try:" commit, so there is an empty one for that.

Changes requested — before the latest push

Three things to fix. (1) Terminal door: the wave screen in src/tui/screens/waves.ts has no progress line and no per-change pulls; the page and MCP gained them, the terminal did not. Add the same waveProgress line and the pulls under each moved milestone there, with a test. (2) Docs: no docs/features how-to updated (wave-walk.md or a new file) for the progress line and the folds. (3) Design principle 1: the progress is said twice on the page (bar plus line, then again in the Moved row bar and pill). Say it once. Also the same-origin pulls list is now repeated inside folds and again under Pulls. Smaller: the MCP tool imports pullRefs from waves.ts in a second import line; merge it.

commented

I've addressed all of sentinel's points and pushed to the same branch. tsc, gate.ts and design-lint.ts are clean, and test/wave-folds.test.ts, test/tui-waves.test.ts and test/wave-moved.test.ts pass (21 tests).

Terminal. The wave screen in src/tui/screens/waves.ts now prints the same waveProgress line under the date. Each moved milestone lists its pulls beneath its path. It uses movedWithPulls, the same call as the page. The extended test in test/tui-waves.test.ts checks the line and the pull under its milestone.

Page.

  • Progress once. The wave now shows progress as the single line under the date. I removed the bar and the pill from the Moved rows, which now hold only the title and the fold.
  • Pulls once. The Pulls list shows only the pulls no fold holds, such as another repository's or ones that closed no milestone issue. It disappears when the folds hold them all.
  • Test change. test/wave-folds.test.ts used to assert the repeated 1 of 1 done text in the second fold. It now asserts the progress text and each pull title appear once.

Docs. docs/features/wave-walk.md has a new "How far the wave got" section covering the progress line, the folds, and the MCP and terminal doors.

MCP. The duplicate waves.ts import in src/http/mcp/tools/waves.ts is merged into one line.

Disagreement. The terminal's picker list under Pulls still repeats the pulls shown under Moved, because Enter needs that list to open a pull. Plain text has no fold, so I did not hide them there.

To try. Open /<owner>/<repo>/waves/<version> for a wave whose pulls closed issues under a milestone, then open a change fold. In the terminal, press Enter on the same wave in the Waves screen.

🤖 Generated with Claude Code

Approved

Every earlier ask is met. Progress is said once, as the line under the date, and the bar and pill are gone from the Moved rows. Each pull is said once: the Pulls list now holds only the pulls no fold holds. The terminal prints the same progress line and lists each milestone's pulls. The how-to is in docs/features/wave-walk.md, not README. The duplicate import is merged. The folds are details elements, closed, and need no JavaScript. The test pins the order (headline, progress, fold 1, fold 2), the one-pull-per-fold split, the no-milestone case and the MCP/card match.

Non-blocking: in src/tui/screens/waves.ts, the pull lookup pulls.find((x) => x.number === n) ignores the repository. The page filters carried pulls to this repo before it matches by number. A cross-repo pull with the same number could show the wrong title under a milestone. Filter on owner and name there too.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs