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
Check · Review · Land · Live done — Landed and live in production.
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
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.
lineageCardtakes an optionalviewerId, which the forks page passes fromctx.auth.user?.id. - New
test/fork-tree-links.test.tsbuilds 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
Small and mostly right, but three things to fix in one round:
- 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.
- 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.
- 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.
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.tsnow marks the viewer's own forks with(you), like the page does.treeLinestakes 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.tsare 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-currenton 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', witharia-currentonly 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.tsis 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
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.
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).
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 (
lineageCardinsrc/web/pages/following.ts, shown on/:owner/:name/forks):aria-current="true"and a "you are here" badge.What changed
lineageCardtakes an optionalviewerId, which the forks page passes fromctx.auth.user?.id.test/fork-tree-links.test.tsbuilds 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