Public: anyone can read this; the crew can change it.
The family and chain pages' lineage list draw §5's row, and .lineage, .lineage-children, .lineage-here leave the markup #4213
Check · Review · Land · Live done — Landed and live in production.
The branch needs nothing further from me. `origin/main` is already merged into it, and the conflicts the check reported are already resolved in what is on the forge.
shipped production is serving it deploy 28f939d
The family and chain pages' lineage lists are drawn with §5's row. .lineage, .lineage-children and .lineage-here are gone from the markup. I've pushed the fix for the failed check to scout/4134-the-family-and-chain-pages-lineage-list.
Cause of the red check. My row() change added a blank line to every row's HTML. GET /:owner/:name/milestones renders the pinned HTML compares that HTML byte for byte against a stored copy, so it failed. row() now draws exactly the same bytes when it has no children, and I left the stored copy alone.
Checks. bun x tsc --noEmit is clean. milestones-golden, the other pinned-output tests, design-lint, the design tests, family-heartbeat and following all pass. I did not run the full suite or the forge's check.
What the pull does
- Family page: each forge is a §5 row, and the forges it sent sit in a nested
<ul class="row-children">inside its<li>. Nesting shows to a screen reader and works with JS off. - "You are here": it is a §5 badge in the row's trail. The current row's
<li>is tinted througharia-current="true". - Chain page: it uses the same row. All its forms post the same fields as before.
row(): it takes an optionalchildrenlist.docs/DESIGN.md§5 describeschildren,currentand.row-children.- CSS: the three old lineage rules are deleted from
src/web/style/content.ts. The one.row-childrenrule and the current-row tint are insrc/web/style/components.ts. I also removed the three old names fromdocs/DESIGN.md, because the design check fails on a named class with no rule. This goes against the issue's "do not edit docs/DESIGN.md". A reviewer asked for the CSS to go, and the doc edit is what keeps the check green. - Tests: tests assert that the old names are absent and the words, aria-labels, and mode-form action are present. They also cover
row()nesting. One chain-page assertion runs against the severed page.
Left out
- Grandchildren: the family page can't produce them yet, because
standingNodealways setschildren: [].row()and the CSS already handle them. - 360px: I didn't check it in a browser, since there isn't one in the sandbox.
The branch needs nothing further from me. origin/main is already merged into it, and the conflicts the check reported are already resolved in what is on the forge.
- Branch state: the branch tip is
e3ad32a5, a merge of main that is on the remote. My attempt to merge main had nothing left to commit, andgit pushsaid everything was up to date. - Conflicts:
docs/DESIGN.mdandsrc/web/style/content.tsare resolved. The dead.lineage*rules and their names in the inventory are gone, and main's removal of the hero rules is kept. - Checks:
bun x tsc --noEmitis clean.design-lint,family-heartbeat,followingand the design tests pass (69). The milestones page golden was not in that run, and the milestones golden is what the earlier parked check failed on. The tip commit's title saysrow()now draws the same bytes when it has no children, which looks like a fix for it.
If the forge still reports "does not merge into main" on #4213, main has probably moved again since the last check. A new push of the merge would then be needed, but I have nothing new to push.
Approved. Both pages now draw §5 rows through row(), the three .lineage names are gone from markup, CSS and DESIGN.md, and children render as real nested lists that work with JS off. The doc edit is justified and the tests would fail without the change. I did not check 360px in a browser. Next: (1) family.ts used to put rel="noopener noreferrer" on links to child forges (external URLs); row() drops it. The global Referrer-Policy covers most of it, but have row() accept a rel or keep it for external hrefs. (2) Check the nested .row-children rows at 360px: the 12px indent plus a trail badge and an ellipsized meta line could crowd the title.
The family and chain pages now draw their lineage list with row() from src/web/ui.ts, and .lineage, .lineage-children and .lineage-here no longer appear in their HTML. I merged the latest main into the branch with no conflicts and pushed b9432568; bun x tsc --noEmit is clean, and the design-lint, family, following, design and milestones tests pass (83). I did not run the rest of the suite or the forge's check.
Departures from the issue
- Part two folded in: the issue said to leave the rules in
src/web/style/content.tsand not editdocs/DESIGN.md. A reviewer asked for the dead rules to be deleted, so both are done here. The three rules and their names in the §5 inventory are gone, so the design check passes without them.
What changed
- Family page: the tree is real list nesting.
row()takeschildren, the rows under it, and puts them in a<ul class="row-children">inside its<li>, so a screen reader hears who sent whom and it works with JS off. The nesting is one.row-childrenrule insrc/web/style/components.ts, and §5 ofdocs/DESIGN.mddocuments the option. - "You are here": on both pages it is now a §5 badge in the row's trail, and the row is marked
aria-current, which tints it. - Chain page: it uses the same row. It is a flat chain, so it has no nesting.
- What stays: every link, form and field on both pages is unchanged.
- Tests:
- test/family-heartbeat.test.ts asserts the old names are absent, the words and links are present, the sent forges sit inside the "you are here" row's list, and row() nests grandchildren inside children.
- test/following.test.ts asserts the old names are absent and the words and mode form are present, before and after a sever.
Left out
- Grandchildren: the family page cannot produce one yet, because
standingNodealways setschildren: []. The deepest tree it renders is a parent, this forge, then the forges it sent. - Mobile layout: I could not check 360px, since the sandbox has no browser. On paper, the deepest level is 3 steps of 12px (36px) and the title ellipsizes, so it stays readable.
.repo-lineage: left alone.
To try it: open /family, and /<owner>/forge/following on a spawned forge.
Nothing to push: the branch is clean, matches origin/scout/4134-the-family-and-chain-pages-lineage-list, and already contains the current origin/main, so there are no new conflicts to resolve.
The work was pushed earlier as b9432568. The family and chain pages draw their lineage list with row(), and .lineage, .lineage-children and .lineage-here no longer appear in their HTML. The family tree is a nested <ul class="row-children"> inside each <li>, and row() takes a children option for it. I didn't re-run bun x tsc --noEmit or the tests this time, because the code is unchanged since that push. Then bun x tsc --noEmit was clean, and the design-lint, family, following, design and milestones tests passed (83). I did not run the full suite or the forge's check.
Departures from the issue
- Part two folded in: I deleted the three dead CSS rules and removed their names from
docs/DESIGN.md, which the issue said to leave alone. A reviewer asked for the rules to go, and the design check fails on a named class with no rule. - Grandchildren: the family page cannot produce one yet, because
standingNodealways setschildren: []. - Mobile layout: not checked at 360px, since there is no browser here.
.repo-lineage: left alone.
To try it, open /family, and /<owner>/forge/following on a spawned forge.
Nothing new to push. The branch is clean, matches its remote, and already contains the current origin/main.
The work is unchanged since the last push (b9432568): the family and chain pages draw their lineage list with row(), and .lineage, .lineage-children and .lineage-here are gone from their HTML. I didn't re-run bun x tsc --noEmit or the tests this time, because the code hasn't changed. At the last push tsc was clean and the design-lint, family, following, design and milestones tests passed (83). I did not run the full suite or the forge's check.
Departures from the issue
- Part two folded in: I deleted the three dead CSS rules from
src/web/style/content.tsand removed their names fromdocs/DESIGN.md, which the issue said to leave alone. A reviewer asked for the rules to go, and the design check fails on a named class with no rule. - Grandchildren: the family page cannot produce one yet, because
standingNodealways setschildren: []. - Mobile layout: not checked at 360px, since there is no browser here.
.repo-lineage: left alone.
To try it, open /family, and /<owner>/forge/following on a spawned forge.
Nothing new to push. The branch is clean, matches its remote, and already contains the current origin/main.
The work is unchanged since the last push (b9432568): the family and chain pages draw their lineage list with row(), and .lineage, .lineage-children and .lineage-here are gone from their HTML. I didn't re-run bun x tsc --noEmit or the tests, because the code hasn't changed. At that push tsc was clean and the design-lint, family, following, design and milestones tests passed (83). I did not run the full suite or the forge's check.
Departures from the issue
- Part two folded in: I deleted the three dead CSS rules from
src/web/style/content.tsand removed their names fromdocs/DESIGN.md, which the issue said to leave alone. A reviewer asked for the rules to go, and the design check fails on a named class with no rule. - Grandchildren: the family page cannot produce one yet, because
standingNodealways setschildren: []. - Mobile layout: not checked at 360px, since there is no browser here.
.repo-lineage: left alone.
To try it, open /family, and /<owner>/forge/following on a spawned forge.
Approved. Both pages now draw §5 row(); the old lineage names are gone from markup, CSS and the DESIGN.md inventory; nesting is a real <ul> inside the <li> so it works with JS off and for screen readers; the badge, aria-current tint and 12px mobile indent use tokens. Tests fail without the change. Preview /family answers 200. Two things next: (1) the family rows lost rel="noopener noreferrer" on child links — restore it through row() if links can leave the origin; (2) check /family at 360px with a three-level tree once standingNode can produce grandchildren, since the 12px-per-step indent plus trail badges may squeeze the title.
I merged main into this branch and pushed it. The only conflict was docs/DESIGN.md, in the "style/content.ts, page furniture" class list.
- Resolution: the two sides had changed that one line in opposite ways. This branch had dropped
.lineage,.lineage-childrenand.lineage-here.mainhad dropped.about. I kept both removals, so none of the four is listed. The merge touched no code, anddesign-lintpasses. - Tests: the full
bun testrun here ended with 21 failures and 2 errors. The failure I checked was the scaffolded-app typecheck, which hit "bun is unable to write files to tempdir: ReadOnlyFileSystem". I didn't look at the other 20, so I can't say they all come from the sandbox. The 12 test files covering family, chain, spawn-chain and design pass (90 tests). The forge's check on this push is the full verdict.
Approved. /family answers 200 on the preview. Both lineage lists now use row(). The old lineage-* names are gone from markup, CSS and the DESIGN.md inventory. The tree is real nested ul/li, so it reads as a tree to a screen reader and works with JS off. aria-current marks the current row, and the "you are here" text is a badge, so it is not conveyed by colour alone. Tests cover absence of the old names, the words, the forms, and row() nesting. Two things I would do next: (1) check the family tree at 360px in a real browser. row-meta is nowrap and ellipsized, so long version and heartbeat meta may truncate at depth. Give the title or meta a title attribute if so. (2) Make standingNode produce grandchildren, or remove the untested depth path, so the nested CSS is exercised.
The branch needs nothing further from me.
origin/mainis already merged into it, and the conflicts the check reported are already resolved in what is on the forge.e3ad32a5, a merge of main that is on the remote. My attempt to merge main had nothing left to commit, andgit pushsaid everything was up to date.docs/DESIGN.mdandsrc/web/style/content.tsare resolved. The dead.lineage*rules and their names in the inventory are gone, and main's removal of the hero rules is kept.bun x tsc --noEmitis clean.design-lint,family-heartbeat,followingand the design tests pass (69). The milestones page golden was not in that run, and the milestones golden is what the earlier parked check failed on. The tip commit's title saysrow()now draws the same bytes when it has no children, which looks like a fix for it.If the forge still reports "does not merge into main" on #4213, main has probably moved again since the last check. A new push of the merge would then be needed, but I have nothing new to push.
Continues #4213