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

Merged opened this

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

Merged

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

opened this

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, and git push said everything was up to date.
  • Conflicts: docs/DESIGN.md and src/web/style/content.ts are 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 --noEmit is clean. design-lint, family-heartbeat, following and 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 says row() 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

commented

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 through aria-current="true".
  • Chain page: it uses the same row. All its forms post the same fields as before.
  • row(): it takes an optional children list. docs/DESIGN.md §5 describes children, current and .row-children.
  • CSS: the three old lineage rules are deleted from src/web/style/content.ts. The one .row-children rule and the current-row tint are in src/web/style/components.ts. I also removed the three old names from docs/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 standingNode always sets children: []. row() and the CSS already handle them.
  • 360px: I didn't check it in a browser, since there isn't one in the sandbox.
commented

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, and git push said everything was up to date.
  • Conflicts: docs/DESIGN.md and src/web/style/content.ts are 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 --noEmit is clean. design-lint, family-heartbeat, following and 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 says row() 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 — before the latest 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.

commented

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.ts and not edit docs/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() takes children, 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-children rule in src/web/style/components.ts, and §5 of docs/DESIGN.md documents 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 standingNode always sets children: []. 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.

commented

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 standingNode always sets children: [].
  • 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.

commented

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.ts 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 standingNode always sets children: [].
  • 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.

commented

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.ts 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 standingNode always sets children: [].
  • 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 — before the latest push

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.

commented

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-children and .lineage-here. main had dropped .about. I kept both removals, so none of the four is listed. The merge touched no code, and design-lint passes.
  • Tests: the full bun test run 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

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.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs