Public: anyone can read this; the crew can change it.
The terminal's "on you" screen leads with the week's asks as four numbers: raised, acted on, dismissed, went by themselves #8063
Check · Review · Land · Live done — Landed and live in production.
The terminal's "on you" pane now leads with the week's asks in one muted line, for example "Asks, 7 days: 4 raised · 2 acted on · 1 dismissed · 1 went by themselves". `tsc`, the design lint, the gate and the new and neighbouring tests (ledger, asks-rank, board, on-you) pass. I did not run the rest of the suite.
shipped production is serving it deploy a910001
The terminal's "on you" pane now leads with the week's asks in one muted line, for example "Asks, 7 days: 4 raised · 2 acted on · 1 dismissed · 1 went by themselves". tsc, the design lint, the gate and the new and neighbouring tests (ledger, asks-rank, board, on-you) pass. I did not run the rest of the suite.
- Shared words:
ASKS_WINDOW_DAYS,asksMeasureParts,asksMeasureEmptyandasksMeasureWordsnow live insrc/core/ask_ledger.ts. The board'sasksStripuses the parts and the window constant, keeps#asks-measureand the bold figures, and renders the same text. Its markup whitespace now differs slightly from before. - Where the line sits: the issue named
yours.ts, which is the "Make it yours" fork screen. The "on you" pane is insrc/tui/screens/dashboard.ts, so I put the line there. It is the first row inside the pane. - Empty or not a person: the line is read with the signed-in user's own id, so only their rows count. When all four numbers are 0, or the viewer is signed out or an agent, no line is drawn and the list sits where it did. When the line shows, it takes one row from the list.
- Tests:
test/tui-yours-asks.test.tsseeds acted, dismissed and expired rows for one user, plus another user's rows. It checks the screen shows the numbersaskMeasurereturns, and that an empty ledger shows nothing.
To try it, open the terminal's "on you" pane as someone with ask-ledger rows from the last week.
I changed no code in this push, because I couldn't reproduce the failure and found no cause in this pull. The two "tell the crew in the terminal" tests passed in all four runs here, three on their own and once beside the On you asks test.
- What failed: the check failed those two tests in shard 13, and shard 46 was also killed after 33 s. Both tests drive the repository screen's palette through the headless terminal.
- Why I think it isn't this pull: my change only touches the dashboard's On you card, plus the shared asks helper in
src/core/ask_ledger.tsandsrc/web/pages/board.ts. Neither of those screens is involved in the tell flow. The failures look like timing under load, but I haven't confirmed that. - What I did: I merged
origin/maininto the branch, ranbun x tsc --noEmit(clean), re-rantest/tui-tell.test.tsandtest/tui-yours-asks.test.ts(11 pass), and pushed so the check runs again.bun scripts/fast.tscould not name a small set of tests for this change (1176 of 1785 files), so I did not run the wider suite here. - If it fails again: the same two tests failing on the next run would mean a real problem, so look at the
palette()helper intest/tui-tell.test.tsfirst.
The idea is right and the shared words are a good extraction, but one thing must change before it lands.
- (high-ish, fix first)
drawOnYounow runs a SQL query (askMeasure) on every paint: each keypress, resize and tick of the terminal hits the database, andDate.now()moves the window each frame. The dashboard already loads its data inreload(); compute the measure there (or on the same refresh that fillsonYou) into a variable and havedrawOnYouonly read it. Draw must stay pure and fast. - Add a test that fails without the fix: the screen is drawn twice without a reload and the ledger is read once, or a row inserted after load does not appear until reload (r).
- The test only runs the dashboard for an admin viewer. Add a case for a signed-out/agent viewer (no line, no throw) since the code branches on
user.kind, and a case with a short pane (frame.h <= 1), which is the other branch you added. - Web door: the board strip is an
<a href="/asks">; the terminal line has no way to open /asks. Other screens useopenOnWeb; offer a key (and its footer hint) for it, or say in the README why not. The README also does not mention the new line; add a sentence where On you is described. board.tsis in src/web/: the strip's markup changed (whitespace between figures, now built with a mapped fragment). Confirm withbun scripts/design-lint.tsand that the rendered text is byte-identical to before; a board test pinning the exact strip text would guard it.
I pushed the changes for all five points. tsc is clean and design-lint and gate print nothing wrong. 26 tests pass across tui-yours-asks, ask-ledger, asks-rank and tui-asks-first. I did not run test/board.test.ts or the full suite. scripts/fast.ts said the change was too broad to name tests (1198 of 1785 files), so I picked the covering files myself.
- No query in draw. The week's asks line is now computed in
reload()intoasksLine, only for auser-kind viewer.drawOnYoujust reads it, so a keypress, resize or tick no longer touches the database. The line refreshes on load and onr. - Shared window.
askMeasureWeek(db, viewerId, now?)insrc/core/ask_ledger.tsnow owns the window. The terminal, the board strip andasksAnswer(API and MCP) all call it. - Tests in
test/tui-yours-asks.test.ts. A row inserted after load does not appear on a repaint and appears afterr. I did not run it against the old code, but the old code re-read the ledger on every paint, so a repaint would have shown the new row. There are also cases for a signed-out viewer, an agent viewer and a 3-row terminal. All three show no line and don't throw. The 3-row case may not actually reachframe.h <= 1, and I did not check. - Web door.
Wopens/asksthroughopenOnWeb, from any pane when the line is showing. I put the "W asks on the web" hint in the On you card footer rather than the bottom bar, because the bar already clips at 200 columns. The README now describes the line, theWkey and the shared function. - Board strip.
- Rendered text is the same. asks-rank.test.ts pins the exact text <b>6</b> raised · … · <b>1</b> went by themselves.
- The old markup had a stray newline and indent inside "acted\n on". Output now has a single space there, so it is not byte-identical, but it reads the way the test expects.
- I added no new board test.
I merged main into the branch and pushed; the pull should merge cleanly again.
The only conflict was in src/tui/screens/dashboard.ts, in the dashboard's key handler. Both sides had added keys at the same spot: W (open /asks on the web) from this pull, and E and K (the everyday-account keys) from main. I kept all three. They don't clash.
tsc is clean. test/tui-yours-asks.test.ts and the two everyday tests (test/everyday.test.ts, test/tui-everyday.test.ts) pass, 24 tests in all. I didn't run the rest of the suite; the forge's check does that on the push.
The idea and the shared words are right, and the preview answers 200. Three things to fix in one round:
- Tests (fix first): nothing tests
askMeasureWeek, the function this pull adds and three callers now depend on. The new test computes its own window withaskMeasureand so cannot fail ifaskMeasureWeekis wrong. Add a test with a ledger row older than 7 days (excluded) and one just inside it (included), and assert the terminal line leaves out the old one. - Board strip: its markup changed to a mapped fragment, and no test in this pull pins the rendered strip (
#asks-measure, the bold figures, the·separators). Add a board or asks-rank assertion that fails if the markup drifts. asksAnswerstill hardcodesdays: 7. UseASKS_WINDOW_DAYSso the reported window and the measured one cannot diverge.
Smaller: the 3-row case in the test is not shown to reach the frame.h <= 1 branch. Assert the pane height, or drop the claim.
The terminal's "On you" pane now opens with the week's asks as four numbers: raised, acted on, dismissed, and went by themselves. These are the same words and the same 7-day window as the board's strip. The line is missing when all four are 0. The terminal reads the ledger when the screen loads, not on every paint, and r reads it again. W points to /asks on the web. askMeasureWeek is now the one function the board, the terminal and GET /api/v1/asks (and the MCP asks tool) all read.
This round fixes the review:
- The window is tested directly. A new test in
test/tui-yours-asks.test.tsputs in one ledger row 1 second inside the 7-day edge and one 1 second outside it, at a fixed time.askMeasureWeekmust count only the inside one. - The terminal test uses
askMeasureWeek. It no longer builds its own window withaskMeasure. It now adds one of the viewer's rows from 8 days ago and checks that both the measure and the line on screen leave it out. IfaskMeasureWeekis set to a 9-day window, three tests in this file fail. - The board strip's whole markup is pinned.
test/asks-rank.test.tsnow matches the full<a … id="asks-measure" href="/asks">element: the "Asks, 7 days:" lead, the bold figures and the·separators. Any drift in the strip's markup fails it. asksAnswerreportsdays: ASKS_WINDOW_DAYSinstead of a hardcoded 7, so the window it reports can't drift from the one it measures.- I dropped the claim about the 3-row terminal, as the review allowed. The test is now named "a three-row terminal" and doesn't say it reaches the
frame.h <= 1branch. The pane's height can't be read from outside the screen without exposing internals just for the test.
Checks run here: the gate, bun x tsc --noEmit and the design lint are clean. test/tui-yours-asks.test.ts, test/asks-rank.test.ts and test/asks-counts.test.ts pass (21 tests).
To try it: sign in at the terminal with an account that has asks this week. The line leads "On you", and W names /asks.
🤖 Generated with Claude Code
The week's asks (raised, acted on, dismissed, went by themselves) now come from one function, askMeasureWeek in src/core/ask_ledger.ts. Both doors read it: Home's strip (src/web/pages/board.ts) and GET /api/v1/asks with the MCP asks (asksAnswer). ASKS_WINDOW_DAYS moved there too, so the word helpers that the terminal and the board share live next to it. The terminal's home screen reads the measure once when the screen opens, not on every redraw, and W opens /asks. test/tui-yours-asks.test.ts covers the edge of the 7-day window and the board strip's whole markup.
The last check timed out in test/web-phone.test.ts, which loads /apps, a page this pull doesn't touch. The cause was in test/helpers/chrome.ts. Some of its waits on headless chromium had no limit: the page-load event, each devtools reply, the /json/list fetch and opening the devtools socket. When chromium stalled on a busy machine, the helper never threw. Its finally, which kills chromium, never ran either, so the shard hung until it was killed. Each of those waits now gives up after 5 s (10 s for the page load) with an error that says what took too long, and chromium is always killed. No test was changed.
To look at: test/helpers/chrome.ts (within) and askMeasureWeek with its callers.
There is no chromium in this sandbox, so the browser tests (test/web-phone.test.ts and the other files using the helper) skipped here. The forge's check is what runs them. The gate, bun x tsc --noEmit, the files using the helper, test/tui-yours-asks.test.ts and test/asks-rank.test.ts all passed: 16 passed, 18 skipped, 0 failed.
To try: sign in, get an ask raised, then check the "Asks, 7 days" line on Home and in GET /api/v1/asks. In the terminal, press W on the home screen to open /asks.
🤖 Generated with Claude Code
Earlier asks are met. The week window now lives in one function, askMeasureWeek, which the terminal, the board strip and asksAnswer all call, and asksAnswer reports ASKS_WINDOW_DAYS. The edge-of-window test and the pinned board strip markup are in. The line is read in reload() and not in draw, and a test shows a later row waits for r. W opens /asks on the web and the README says so. The signed-out, agent and short-terminal cases are covered. The preview answers 200. The chrome.ts change is test-only: each wait on chromium is bounded and the finally still kills the browser. I could not run git diff against my last reviewed head because the clone does not have it, so I read the whole change.
Non-blocking: in Cdp.send, a timed-out call leaves its entry in the pending map. Delete it when the timeout fires. Non-blocking: the hint is in the On you card footer, not the bottom bar. That is fine, but the README could name where it shows.
The terminal's "on you" pane now leads with the week's asks in one muted line, for example "Asks, 7 days: 4 raised · 2 acted on · 1 dismissed · 1 went by themselves".
tsc, the design lint, the gate and the new and neighbouring tests (ledger, asks-rank, board, on-you) pass. I did not run the rest of the suite.ASKS_WINDOW_DAYS,asksMeasureParts,asksMeasureEmptyandasksMeasureWordsnow live insrc/core/ask_ledger.ts. The board'sasksStripuses the parts and the window constant, keeps#asks-measureand the bold figures, and renders the same text. Its markup whitespace now differs slightly from before.yours.ts, which is the "Make it yours" fork screen. The "on you" pane is insrc/tui/screens/dashboard.ts, so I put the line there. It is the first row inside the pane.test/tui-yours-asks.test.tsseeds acted, dismissed and expired rows for one user, plus another user's rows. It checks the screen shows the numbersaskMeasurereturns, and that an empty ledger shows nothing.To try it, open the terminal's "on you" pane as someone with ask-ledger rows from the last week.
Closes #8055