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

The studio's three lists disagree: one header, and two dead filters #175

shipped production is serving it opened this has it
opened this

The studio's three lists are meant to be one thing three times. Two details disagree, both in src/web/studio/lists.ts, and both show on the page.

Seen on today's main, booted locally, with one tell and one change:

/tells     ola / wren  Private  a wren   tabs: Studio | Told 1 | Look 1 | Map | Settings
/changes   ola / wren  Private  a wren   …
/runs      ola / wren  Private           ← no description, and a compact header

The header. studioTells and studioChanges call repoHeader(ctx, repo, "issues"|"pulls") (:192, :280); studioRuns calls repoHeader(ctx, repo, "app", { compact: true }) (:394). So the runs list loses the description the other two carry, and marks the Studio tab as where you are when you are not on it.

The filter. All three draw the same bar — Open · Told · Working · Look · Shipped · Stopped (wordFilterBar, :88). But pullWord never returns told, and runWord returns it only by delegating to pullWord, which does not either. So on /changes and /runs, Told is a link that can only ever land on Nothing matches this filter yet. Two dead options, offered as prominently as the four that work.

Acceptance

  • [x] The three lists carry the same header treatment: whatever repoHeader argument is right for a list, all three use the same shape, and the runs list shows the description the others do.
  • [x] The tab strip marks where the reader actually is on all three; the runs list does not claim to be the app page.
  • [x] Each list's filter bar offers only the words its rows can have: Told is gone from the changes and runs lists, and every remaining word can match something.
  • [x] ?word=told asked for directly on those lists still answers — it is a URL people may hold — with the list's own empty state rather than an error.
  • [x] The bar is still one component: which words to show is an argument, not a copy of the bar per list.
  • [x] ?mode=dev on all three is unchanged.
  • [x] Tests: the three headers agree; the changes and runs bars do not offer Told; the tells bar still offers all five. They fail on today's code.
  • [x] bun test green.

Files I expect to change

src/web/studio/lists.ts, test/studio.test.ts (and test/studio-words.test.ts if the table asserts the bar).

Risks

  • A word that is unreachable today may not be tomorrow. If a change could ever read told, the right fix is to make the bar ask the vocabulary rather than hard-code a list per page — prefer that, and say in the pull how the words are derived.
  • The runs list may be compact on purpose — it is the busiest of the three. If so, make the other two compact instead and say why; what matters is that they agree.
  • Do not touch what the lists show, only how they frame it: which runs belong in the studio's runs list is settled by the footer sentence it already carries.

Suggested: Scout.

commented

One more thing the same three lists do, seen on a brand-new app: with no filter set and no rows at all, each says "Nothing told matches this filter yet" under the five word-chips. Filed separately as #273 so it does not widen this issue while pull #178 is open — but it is the same file (src/web/studio/lists.ts), so whoever lands first should expect the other to touch it.

commented

Released from Later to use the week's subscription: Behind pace: 75% of the week left with 17% of its time gone, reset 2026-11-15 02:00 UTC, burning 0% an hour against 0.5% allowed; speeding up to 5 of 5 slots and releasing the next issue.

commented

Reviewed pull #10030 at its head: ticked The three lists carry the same header treatment: whatever repoHeader argument is right for a list, all three use the same shape, and the runs list shows the description the others do.; The tab strip marks where the reader actually is on all three; the runs list does not claim to be the app page.; Each list's filter bar offers only the words its rows can have: Told is gone from the changes and runs lists, and every remaining word can match something.; ?word=told asked for directly on those lists still answers — it is a URL people may hold — with the list's own empty state rather than an error.; The bar is still one component: which words to show is an argument, not a copy of the bar per list.; ?mode=dev on all three is unchanged.; Tests: the three headers agree; the changes and runs bars do not offer Told; the tells bar still offers all five. They fail on today's code.; bun test green..

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs