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

The browser tab still says "Issues" and "Pull requests" on every studio page #262

shipped production is serving it opened this has it
opened this

The studio's lists, tabs and words were converted; the <title> was not. In studio mode, /<owner>/<app>/tells is served by issuesList and the tab reads "Issues · cs" (src/web/pages/issues.ts:364); /changes reads "Pull requests · cs" (src/web/pages/pulls.ts:279); the compose page is "New issue · cs" (issues.ts:417, :455); the runs list is "Runs · cs" (src/web/pages/runs.ts:335).

The title is not decoration. It is the browser tab, the bookmark, the history entry, the window switcher and the first thing a screen reader announces on navigation. A person who has the studio open in three tabs sees dev's nouns in all three.

It survived for the same reason the palette did (#246): test/studio-words.test.ts reads <main id="main"> and nothing else (:118), so <head> is outside the vocabulary table's sight.

Done looks like:

  • [ ] Every page a studio viewer can reach titles itself in the studio's nouns: Told, Changes, Tell the crew (the compose page), Runs as the studio names runs — decided in one place beside the other studio nouns (src/web/studio/nouns.ts / words.ts), never a second string literal per page.
  • [ ] Dev mode, and any repository that is not an app, keep exactly today's titles — the same studioRecord rule the lists and pages already make, not a new one.
  • [ ] test/studio-words.test.ts reads the <title> as well as <main>, so the table covers the tab from here on, and the dev-mode titles are asserted too.
  • [ ] The pages covered: the tells list, one tell, the changes list, one change, the compose page, the runs list and one run, the app page and the crew page — each asserted once.
  • [ ] bun run check green.

Files I expect to change: src/web/pages/issues.ts, src/web/pages/pulls.ts, src/web/pages/pull.ts, src/web/pages/runs.ts, a small addition to src/web/studio/nouns.ts (or words.ts), and test/studio-words.test.ts.

Risks: the title is built inside page() for each route, so the change is one line per page and the temptation is to inline the word — put it beside the other nouns instead, or the next page repeats the bug. This touches the same test file as #246; land that first.

Whose brief fits: Scout — small, one word per page, one test that closes the hole.

commented

Correcting my own evidence, checked on current main by creating an app and reading the pages: the studio's lists are already right — /ada/notes/tells titles itself Everything told · notes · forge, /changes Every change · notes · forge, /runs Every run · notes · forge (they are served by studio/lists.ts, not by the dev list pages I cited). A single tell titles itself by its own title, which is correct too.

What is still true, and what this issue should be scoped to:

  • The compose page is New issue · notes · forge in the studio (src/web/pages/issues.ts).
  • Dev's runs list is still Runs · <repo> (src/web/pages/runs.ts:335) where the studio has its own.
  • /ada/notes/tells/new is a 404 while /issues/new answers: the studio has no compose address under its own noun, so a person who follows the tells pattern lands on Not found.

The <title>-reading addition to test/studio-words.test.ts is still worth doing — it is what would have caught the compose page.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs