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

The terminal's asked screen narrows to unshipped, flagged or all with `s`, and flips oldest/newest with `o`, as MCP `asked` does #7313

Merged opened this

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

Merged

The terminal's asked screen (`src/tui/screens/asked.ts`) can now narrow and reorder its list the way MCP `asked` does.

shipped production is serving it deploy e209d31

opened this

The terminal's asked screen (src/tui/screens/asked.ts) can now narrow and reorder its list the way MCP asked does.

  • s and o keys: s cycles not shipped → flagged → all, and o switches between oldest first and newest first. The screen title and the header line say the current choice, e.g. "Asked · not shipped, oldest first". Changing either one reloads the list and puts the cursor back at the top.
  • Defaults: unshipped and oldest first, the same as MCP. askedLines takes an optional view and still passes it to the shared askedIn read, so who can see what is unchanged.
  • Row words: each ask's row now starts with its MCP state (waiting, building, shipped, closed), then flagged or stale, then its age. The outcome sentence ("landed in #n", "parked: …") stays on the second line, so the old per-row badge words are gone.
  • Docs: docs/TOUR.md describes the new keys and words.

Look at the order: I kept the screen's existing grouping, which puts asks that need the owner (parked, failed, done on main) first, as /asked does. test/asked-outcomes.test.ts (#5802) pins that grouping for the terminal. Inside each group the order is exactly MCP's, so not shipped and flagged come out identical to MCP. With all, a shipped ask can sit lower than in MCP's list. Making both match exactly would mean changing that test or MCP's order, and I left that for a person to decide.

Testing: the new test/tui-asked-view.test.ts seeds a flagged ask, a fresh ask and a shipped one. It compares each choice with what the MCP asked tool itself returns, checks that newest first reverses the list, checks the row words, and presses s/o in a headless terminal to check the title and list. These pass along with the existing asked and terminal tests, test/mcp-size.test.ts and bun x tsc --noEmit. scripts/fast.ts named 131 test files, more than its time budget, so I ran a hand-picked subset and left the full run to the forge's check.

To try it: Ctrl+K → Asked, then press s and o.

🤖 Generated with Claude Code

Closes #7303

commented

The terminal's asked screen (src/tui/screens/asked.ts) can now narrow and reorder its list the way MCP asked does.

  • s and o keys: s cycles not shipped → flagged → all, and o switches between oldest first and newest first. The screen title and the header line say the current choice, e.g. "Asked · not shipped, oldest first". Changing either one reloads the list and puts the cursor back at the top.
  • Defaults: unshipped and oldest first, the same as MCP. askedLines takes an optional view and still passes it to the shared askedIn read, so who can see what is unchanged.
  • Row words: each ask's row now starts with its MCP state (waiting, building, shipped, closed), then flagged or stale, then its age. The outcome sentence ("landed in #n", "parked: …") stays on the second line, so the old per-row badge words are gone.
  • Docs: docs/TOUR.md describes the new keys and words.

Look at the order: I kept the screen's existing grouping, which puts asks that need the owner (parked, failed, done on main) first, as /asked does. test/asked-outcomes.test.ts (#5802) pins that grouping for the terminal. Inside each group the order is exactly MCP's, so not shipped and flagged come out identical to MCP. With all, a shipped ask can sit lower than in MCP's list. Making both match exactly would mean changing that test or MCP's order, and I left that for a person to decide.

Testing: the new test/tui-asked-view.test.ts seeds a flagged ask, a fresh ask and a shipped one. It compares each choice with what the MCP asked tool itself returns, checks that newest first reverses the list, checks the row words, and presses s/o in a headless terminal to check the title and list. These pass along with the existing asked and terminal tests, test/mcp-size.test.ts and bun x tsc --noEmit. scripts/fast.ts named 131 test files, more than its time budget, so I ran a hand-picked subset and left the full run to the forge's check.

To try it: Ctrl+K → Asked, then press s and o.

🤖 Generated with Claude Code

Changes requested — before the latest push

The keys work and the defaults, flagged and newest-first match MCP. Three things to fix in this round:

  1. show=all does not come out in MCP's order. The tier sort regroups the list, and the pull's own description admits this. The issue asks for the screen to behave 'as MCP asked does', and the test hides the difference with .sort(). Either make the order the same, or keep the tier grouping only for the default view and say why in TOUR.md. Then assert the exact order for all and for newest. A guest still sees nothing private, and an admin still sees everything, because the read stays on askedIn.
  2. The stale word has no test. Seed an ask old enough to be stale and assert meta contains stale. Without it, deleting that branch fails nothing.
  3. The header line reads 'N asks not shipped, oldest first', which is awkward. It should read like 'N asks · not shipped, oldest first'. The header and the title also repeat the same words, so the header only needs the count.

Smaller: docs/TOUR.md should name the order caveat once it is settled.

commented

The terminal's asked screen now filters with s (not shipped → flagged → all) and flips oldest/newest with o, using MCP asked's defaults, words and order in every view (src/tui/screens/asked.ts). The rows no longer use the askedTier grouping that /asked uses. That grouping put rows needing the owner first, so show=all and newest came out in a different order from MCP. I removed it for every view instead of keeping it only for the default, so that the terminal and an agent always read the same list. The read stays on askedIn, so a guest still sees nothing private and an admin still sees everything.

  • Header line: it now only gives the counts, N thoughts · N asks. The title already shows the choice (Asked · not shipped, oldest first), so the header no longer repeats it.
  • Tests: test/tui-asked-view.test.ts now checks the exact order against MCP for all oldest, all newest and unshipped newest, with no .sort(). It also adds a building ask past the stale window, so a row's meta must read building stale and not flagged. Deleting the stale branch in askLine now fails a test. The screen test checks the new title and header wording.
  • Docs: docs/TOUR.md says the terminal keeps MCP's order in every view, while the web page /asked puts what needs you first.

bun test test/tui-asked-view.test.ts test/tui-asked.test.ts passes (14 tests), and bun x tsc --noEmit is clean. scripts/fast.ts named 131 test files for this change, which is over its time budget, so I ran only these two and left the full run to the forge's check.

To try it: Ctrl+K, then Asked. Press s twice to reach "all"; the rows come out oldest first, the same as MCP asked with show: "all". Then press o to reverse them.

🤖 Generated with Claude Code

commented

The terminal's asked screen filters with s (not shipped → flagged → all) and flips oldest/newest with o. Its rows now come out in MCP asked's order in every view, and it uses the same defaults and words (src/tui/screens/asked.ts). I removed the grouping the /asked page uses (what needs the owner comes first), because it gave a different order from MCP for show=all and newest. The read still goes through askedIn, so a guest sees nothing private and an admin sees everything. The title names the current view (Asked · not shipped, oldest first), and the line under it only gives the counts (N thoughts · N asks).

  • test/tui-asked-view.test.ts: compares the exact order against MCP for all oldest, all newest and not-shipped newest, without .sort(). It also seeds a building ask older than the stale window, so a row's meta must read building stale and not flagged.
  • test/asked-outcomes.test.ts: this test was wrong under the new order, so I changed the test, not the code. It is about the terminal showing the same outcome sentence, but it read the parked ask from row 0, which held only under the old grouping. It now finds the row by title and still checks the sentence.
  • docs/TOUR.md: says the terminal keeps MCP's order while the web page /asked puts what needs you first.

bun test on test/asked-outcomes.test.ts, test/tui-asked-view.test.ts and test/tui-asked.test.ts passes (21 tests), and bun x tsc --noEmit is clean. The full check runs on this push.

To try it: Ctrl+K, then Asked. Press s twice to reach "all"; the rows match MCP asked with show: "all". Then press o to reverse them.

🤖 Generated with Claude Code

Approved

All three earlier asks are met. 1) Order: the tier sort is gone, rows keep MCP order in every view, and the tests assert the exact order for all/oldest, all/newest and unshipped/newest against the MCP tool itself, with no .sort(). The asked-outcomes test was wrong under the new order, and finding the row by title is the right change. 2) Stale: a building ask past the stale window is seeded and meta must read building stale and not flagged. 3) Header: it now gives counts only, and the title names the choice. TOUR.md names the order caveat. The read still goes through askedIn, so guest and admin visibility are unchanged. Two things I would do next, both Non-blocking: show the current choice in the key hints, for example s show: flagged, so it can be read without the title; and add a test that a guest pressing s or o sees nothing.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs