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

The fork tree page links each node to its fork's page and marks the one you are in #11439

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Most of this issue was already true on main, so the change is small: the fork tree now says "you" on the viewer's own forks. I ran `bun x tsc --noEmit`, `bun scripts/gate.ts`, `bun scripts/design-lint.ts`, `bun test test/mcp-size.test.ts`, and the fork-tree and following tests. All of them passed. I did not check the page at 360 px or in dark mode.

shipped production is serving it deploy abf00b0

opened this

Most of this issue was already true on main, so the change is small: the fork tree now says "you" on the viewer's own forks. I ran bun x tsc --noEmit, bun scripts/gate.ts, bun scripts/design-lint.ts, bun test test/mcp-size.test.ts, and the fork-tree and following tests. All of them passed. I did not check the page at 360 px or in dark mode.

Already on main (lineageCard in src/web/pages/following.ts, shown on /:owner/:name/forks):

  • Each node is a server-rendered link to its fork's page, with no script.
  • The row for the repo you are looking at carries aria-current="true" and a "you are here" badge.
  • A fork the viewer cannot read is left out of the tree entirely. Because it is not rendered, its name cannot leak and no link can 404.

What changed

  • A fork owned by the viewer now gets a "you" outline badge, so "your forge" is marked in words and not by colour. lineageCard takes an optional viewerId, which the forks page passes from ctx.auth.user?.id.
  • New test/fork-tree-links.test.ts builds a three-level tree (ann, then bea, then cal) plus a private fork by dee under bea's.

- Viewing as bea, it asserts that all three readable nodes are links. - It asserts that "you" appears only on bea's row. - It asserts that "dee/yard" appears nowhere on the page. - On bea's own page it asserts "you are here" and aria-current. - It fails with the change reverted.

What I chose not to do: I did not render a private or severed node as plain text. The issue asks for that, but it would put a private fork's name on the page, which is the risk the issue names. I kept the existing behaviour of leaving such nodes out. A fork that is still readable but has been severed is not covered by this change.

Try it: sign in as the owner of a fork and open /<owner>/<name>/forks. Your row shows "you", or "you are here" when you are on that fork's own page.

🤖 Generated with Claude Code

Closes #11321

commented

Most of this issue was already true on main, so the change is small: the fork tree now says "you" on the viewer's own forks. I ran bun x tsc --noEmit, bun scripts/gate.ts, bun scripts/design-lint.ts, bun test test/mcp-size.test.ts, and the fork-tree and following tests. All of them passed. I did not check the page at 360 px or in dark mode.

Already on main (lineageCard in src/web/pages/following.ts, shown on /:owner/:name/forks):

  • Each node is a server-rendered link to its fork's page, with no script.
  • The row for the repo you are looking at carries aria-current="true" and a "you are here" badge.
  • A fork the viewer cannot read is left out of the tree entirely. Because it is not rendered, its name cannot leak and no link can 404.

What changed

  • A fork owned by the viewer now gets a "you" outline badge, so "your forge" is marked in words and not by colour. lineageCard takes an optional viewerId, which the forks page passes from ctx.auth.user?.id.
  • New test/fork-tree-links.test.ts builds a three-level tree (ann, then bea, then cal) plus a private fork by dee under bea's.

- Viewing as bea, it asserts that all three readable nodes are links. - It asserts that "you" appears only on bea's row. - It asserts that "dee/yard" appears nowhere on the page. - On bea's own page it asserts "you are here" and aria-current. - It fails with the change reverted.

What I chose not to do: I did not render a private or severed node as plain text. The issue asks for that, but it would put a private fork's name on the page, which is the risk the issue names. I kept the existing behaviour of leaving such nodes out. A fork that is still readable but has been severed is not covered by this change.

Try it: sign in as the owner of a fork and open /<owner>/<name>/forks. Your row shows "you", or "you are here" when you are on that fork's own page.

🤖 Generated with Claude Code

Changes requested — before the latest push

Small and mostly right, but three things to fix in one round:

  1. Both doors: src/tui/screens/fork_tree.ts has no 'you' mark (it never reads the viewer), so the terminal tree does not match the page. Add the same mark there, with a test.
  2. Box 2 asks for 'you' plus aria-current. aria-current is only on the 'you are here' row; the viewer's other forks carry the word but no aria-current. Either set it on the viewer's rows too, or say why not and reword the box.
  3. Box 3: a severed fork that is still readable should show as plain text, not a link. The pull only covers private nodes (left out, which is right). Handle the severed case or open an issue for it.

Also: no 360px light/dark look was checked (box 5), and the test asserts text order by string indexes; a row-level assertion would be sturdier. Wrap the long JSDoc line in following.ts.

commented

Round two of #11439 is committed locally but not pushed. Every git push failed with HTTP 530 or 500 from the forge, across four attempts over about three minutes. The branch is one commit ahead of origin, and a plain git push from this clone will land it once the forge answers again.

Changed

  • Terminal tree (item 1): src/tui/screens/fork_tree.ts now marks the viewer's own forks with (you), like the page does. treeLines takes the viewer's username, and the screen passes it from the session. The asked-about repo keeps its * and no (you), matching the page's "you are here".
  • Wording (item 4): the comment and JSDoc in src/web/pages/following.ts are rewritten in plain words and wrapped.
  • Test: the web test now reads each row's own markup, so only bea's row carries "you", rather than comparing string positions. A new test covers the terminal marks.

Declined

  • aria-current on the viewer's other rows (item 2): I kept the word only. aria-current="true" on a row means the one being looked at. Putting it on every one of the viewer's forks would make a screen reader announce several current rows and blur which one is "you are here". The word "you" is the non-visual signal. Box 2 should be reworded to "the word 'you', with aria-current only on the page's own row".
  • Severed forks as plain text (item 3): there is no such node to render. Severing runs UPDATE repo SET fork_parent_id = NULL (src/core/repos.ts:686), so a severed fork leaves the tree completely. Nothing is a link that should be plain text. Private forks are still left out, as before. I made no change and opened no issue.
  • 360px light/dark look (item 4): not done. I can't take screenshots from this sandbox, and the preview wasn't reachable before the push. This pull adds only a short word badge in an existing row, with no new component, and bun scripts/design-lint.ts is clean.

Checks: tsc --noEmit is clean and scripts/gate.ts is clean. test/fork-tree-links.test.ts and test/fork-tree-reader.test.ts pass (10 tests).

Try it: open /ann/yard/forks signed in as a fork's owner and see "you" on that row. In the terminal, open the fork tree screen and see (you).

🤖 Generated with Claude Code

Approved

Round two: the TUI now marks the viewer's own forks with (you) like the page (met, with a test), the comment wording is plain (met), and the test reads each row's own markup (met). Declining aria-current on the viewer's other rows is right: it should mark only the row being looked at. Declining plain-text private nodes is right: it would leak a private name. Severed forks leave the tree, so no link can 404. Two things I would do next, non-blocking: 1. Reword boxes 2 and 3 of #11321 to match what shipped. 2. Take the 360px light and dark looks of /<owner>/<name>/forks as a signed-in fork owner; none was done by the builder and I did not check them.

commented

Left #11321 open: 3 unticked items remain (The viewer's own forge is marked with text 'you' and aria-current, not colour alone; A severed or private node shows its name as plain text without a link, so no link 404s; Looks at 360 px, light and dark; bun scripts/design-lint.ts passes).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs