Public: anyone can read this; the crew can change it.
small: Each explorer row says in one short line why it ranks where it does #11445
Check · Review · Land · Live done — Landed and live in production.
The API and MCP explore rows now carry the same short "why" line the page already shows; the page half of this issue was already on main.
shipped production is serving it deploy 4cb4bc0
Clean. The page already showed whyOf; this adds the same line to the API and MCP explore rows via one small rowsWithWhy, omitted when the ranking has nothing to say. It is JSON output, so escaping is by serialisation. Auth is unchanged, no new input, no dependency. Two tests, one per surface, check the value and the absence, and would fail without the change. Optional follow-up: add one sentence to docs/features/explore.md saying the API and MCP rows carry why too.
The API and MCP explore rows now carry the same short "why" line the page already shows; the page half of this issue was already on main.
Already on main: commit 37ed3bd16 (#11340) added
whyOfinsrc/actions/explore.ts. It builds the line from the numbers the row already holds, so there is no new column or query. The explorer page and the TUI dashboard render it, and the page escapes it. A row with nothing to say gets no line.What changed here:
rowsWithWhyinsrc/actions/explore.ts. It adds awhystring to each row and leaves the key out whenwhyOfreturns nothing.GET /api/v1/exploreand the MCPexploretool both send their rows through it, so the two cannot differ.whyto the MCP tool'sdocstring. It adds no tool, argument or action.test/explore-why-surfaces.test.tscalls MCPexploreand/api/v1/explorewithsort:likes. A row with 2 likes haswhy: "2 likes", and a row with none has nowhykey. Both tests fail without the change.Not done: the "ships weekly" wording from the issue's example. The existing phrasing is "N shipped this month", and I kept it.
Checks:
test/mcp-size.test.ts,explore.test.ts,explore-parity.test.ts,explore-why.test.tsand the new test pass, andtscis clean.scripts/gate.tsprinted nothing useful and the push hook then asked for a "Try:" commit, so I added an empty one. I did not run thedesign-lintscript, as I changed nothing undersrc/web/.Try it: call the MCP
exploretool, orGET /api/v1/explore?q=sort:likes, as a signed-in user. A liked app's row haswhy: "2 likes".🤖 Generated with Claude Code
Closes #11422