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
Check · Review · Land · Live done — Landed and live in production.
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 9afb56b
The terminal's asked screen (src/tui/screens/asked.ts) can now narrow and reorder its list the way MCP asked does.
sandokeys:scycles not shipped → flagged → all, andoswitches 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.
askedLinestakes an optional view and still passes it to the sharedaskedInread, so who can see what is unchanged. - Row words: each ask's row now starts with its MCP state (
waiting,building,shipped,closed), thenflaggedorstale, 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.mddescribes 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
The keys work and the defaults, flagged and newest-first match MCP. Three things to fix in this round:
show=alldoes 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 MCPaskeddoes', 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 foralland fornewest. A guest still sees nothing private, and an admin still sees everything, because the read stays onaskedIn.- The
staleword has no test. Seed an ask old enough to be stale and assertmetacontainsstale. Without it, deleting that branch fails nothing. - 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.
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.tsnow checks the exact order against MCP foralloldest,allnewest and unshipped newest, with no.sort(). It also adds a building ask past the stale window, so a row's meta must readbuilding staleand notflagged. Deleting the stale branch inaskLinenow fails a test. The screen test checks the new title and header wording. - Docs:
docs/TOUR.mdsays the terminal keeps MCP's order in every view, while the web page/askedputs 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
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 foralloldest,allnewest and not-shipped newest, without.sort(). It also seeds a building ask older than the stale window, so a row's meta must readbuilding staleand notflagged.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/askedputs 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
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.
The terminal's asked screen (
src/tui/screens/asked.ts) can now narrow and reorder its list the way MCPaskeddoes.sandokeys:scycles not shipped → flagged → all, andoswitches 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.askedLinestakes an optional view and still passes it to the sharedaskedInread, so who can see what is unchanged.waiting,building,shipped,closed), thenflaggedorstale, 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/TOUR.mddescribes 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
/askeddoes.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.tsseeds a flagged ask, a fresh ask and a shipped one. It compares each choice with what the MCPaskedtool itself returns, checks that newest first reverses the list, checks the row words, and pressess/oin a headless terminal to check the title and list. These pass along with the existing asked and terminal tests,test/mcp-size.test.tsandbun x tsc --noEmit.scripts/fast.tsnamed 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 presssando.🤖 Generated with Claude Code
Closes #7303