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

The /changelog page fits a 390 px phone: no sideways scroll, long entries wrap #9363

Merged opened this

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

Merged

`/changelog` did not fit before this change: its rows kept titles and meta on one line with an ellipsis. That left a long unbroken title cut off instead of wrapped. Long titles and 300-character words now wrap.

shipped production is serving it deploy 3b382b3

opened this

/changelog did not fit before this change: its rows kept titles and meta on one line with an ellipsis. That left a long unbroken title cut off instead of wrapped. Long titles and 300-character words now wrap.

  • Fix: src/web/pages/changelog.ts marks the #shipped region with a data-changelog attribute and ships a small <style> for it. Inside it, text breaks anywhere (overflow-wrap: anywhere), and a row's title and meta wrap (white-space: normal) and align to the top. No fixed width and no new class. Route and data reads are unchanged, and src/http/api.ts is untouched.
  • Test: test/changelog-fit.test.ts seeds 15 merged pulls, one with a 300-character word and one with a long title, and renders /changelog. It asserts:

- the long content and at least 15 rows are on the page; - no inline width/min-width and no shipped rule fixes a width over 390 px; - the container wraps anywhere and its rows may wrap. This is the assertion that fails without the fix.

  • Docs: docs/design/areas/changelog.md is new and describes the rule.
  • Checks: the new test, test/changelog.test.ts, bun scripts/design-lint.ts and bun x tsc --noEmit all pass. I did not run scripts/gate.ts.
  • Not done: I did not measure the page in a real Chromium at 390 px, so the "no sideways scroll" claim rests on the CSS and the test, not a screenshot. I did not add a phone look for /changelog to the preview looks, so there is no phone screenshot to link from the preview and I could not check it. Sibling pages are untouched.

Does it scroll sideways at 390 px? I expect no, but I have not measured it. Open the preview's /changelog on a phone-width screen to check.

Closes #9349

commented

/changelog did not fit before this change: its rows kept titles and meta on one line with an ellipsis. That left a long unbroken title cut off instead of wrapped. Long titles and 300-character words now wrap.

  • Fix: src/web/pages/changelog.ts marks the #shipped region with a data-changelog attribute and ships a small <style> for it. Inside it, text breaks anywhere (overflow-wrap: anywhere), and a row's title and meta wrap (white-space: normal) and align to the top. No fixed width and no new class. Route and data reads are unchanged, and src/http/api.ts is untouched.
  • Test: test/changelog-fit.test.ts seeds 15 merged pulls, one with a 300-character word and one with a long title, and renders /changelog. It asserts:

- the long content and at least 15 rows are on the page; - no inline width/min-width and no shipped rule fixes a width over 390 px; - the container wraps anywhere and its rows may wrap. This is the assertion that fails without the fix.

  • Docs: docs/design/areas/changelog.md is new and describes the rule.
  • Checks: the new test, test/changelog.test.ts, bun scripts/design-lint.ts and bun x tsc --noEmit all pass. I did not run scripts/gate.ts.
  • Not done: I did not measure the page in a real Chromium at 390 px, so the "no sideways scroll" claim rests on the CSS and the test, not a screenshot. I did not add a phone look for /changelog to the preview looks, so there is no phone screenshot to link from the preview and I could not check it. Sibling pages are untouched.

Does it scroll sideways at 390 px? I expect no, but I have not measured it. Open the preview's /changelog on a phone-width screen to check.

commented

The gate failed because no commit message had a Try: line. I added one in a new commit and pushed it. Locally bun scripts/gate.ts printed nothing, which I take as a pass; I have not seen the forge's check run on the new push yet.

The fix itself is unchanged: on /changelog, long titles and unbroken words now wrap instead of being cut off with an ellipsis. The new Try: line reads: "open /changelog on the preview at a 390 px width; long titles wrap and the page does not scroll sideways".

What changed: the #shipped region now carries a data-changelog attribute, and a small style block in src/web/pages/changelog.ts lets text break anywhere and rows wrap. test/changelog-fit.test.ts seeds a 300-character word, a long title and 15 rows, and pins that nothing fixes a width over 390 px. docs/design/areas/changelog.md documents it.

What I left out: I did not measure the page in a real Chromium at 390 px, and I added no phone look for /changelog to the preview looks, so there is no screenshot to link. The "no sideways scroll" claim rests on the CSS and the test, not on a measurement. I did not touch sibling pages.

How to try it: open /changelog on the preview at phone width.

Changes requested — before the latest push

The idea is right and the preview does serve the data-changelog attribute and the style block, but three things need fixing in one round.

  1. (First) Reuse the existing pattern instead of a per-page stylesheet. components.ts:493 already ships .setting-list .row-title, .setting-list .row-meta { white-space: normal; overflow: visible; overflow-wrap: anywhere; } plus a wrapping row and trail (lines 491-496), and docs/design/areas/settings.md and map.md already name it for exactly this. Put the changelog's day lists in .setting-list (or, if the card/listCard helper cannot take it, add the one-line selector to that shared rule) and delete CHANGELOG_CSS and the styleCss argument. A page-local <style> with its own selectors departs from DESIGN.md's tokens-and-named-components rule, and is not byte-free on a page that must paint without shift.
  2. The row trail (time, sha, badges) is not handled: .row-trail can still push the row past 390 px. The shared pattern lets it wrap under 640px (flex-basis:100%); do the same, and assert it in the test.
  3. Box 3 is not met: the description links no phone look of /changelog and says 'I expect no', not whether it scrolls sideways. Add the phone look to the preview looks, link it, and state the measured result in one line. A measured claim, not an expectation.

Test: the third test asserts the wrap rule on the page's own <style>, so it will need to point at the shared rule (components css) after item 1. Keep the width assertions.

commented

The /changelog day lists and the "On its way" list now use the shared .setting-list rule, and the page-local stylesheet is gone. I did not measure the page on a phone. Item 3 is only half done for that reason.

  • Shared rule (item 1): I deleted CHANGELOG_CSS, the styleCss argument and the data-changelog attribute. The lists are <ul class="list setting-list">, so rows wrap and titles and meta break long words anywhere, using the existing rule at components.ts:491-496. listCard can't take the class, so "On its way" is a card with its own <ul>. I rewrote docs/design/areas/changelog.md to match.
  • Row trail (item 2): the same shared rule puts the trail (time, sha, badges) on its own line under 640px (flex-basis:100%). The test asserts that rule, the row wrap and the title and meta wrap against the components CSS. The width assertions are unchanged.
  • Phone look (item 3): /changelog is now in PREVIEW_OWNER_LOOKS as a phone look, and a test asserts it. The preview looks are only produced once the preview deploys, so I have no link to one yet. Because I measured nothing, I'm not claiming either way whether the page scrolls sideways at 390 px. What I have is the test result: no inline or shipped fixed width over 390 px, and the wrap rules above.

tsc, the design lint and the changelog, pulls-fit and preview tests pass.

commented

I merged main into the branch and pushed it. The only conflict was in src/spawn/preview-looks.ts, and I kept both sides' entries in PREVIEW_OWNER_LOOKS: the changelog page from this pull and the issues page from main.

tsc and the design lint are clean. The changelog, pulls-fit and preview tests pass (55 of 55). I didn't run the full suite, since the forge runs it on the push.

The earlier caveat still stands: I haven't measured /changelog on a phone. The phone look is only produced once the preview deploys.

Changes requested — before the latest push

The code now follows the shared pattern (.setting-list, no page-local style, trail wraps under 640px, phone look registered, tests pin the shared rules). One thing remains, and it is a miss against the issue.

  1. (First) Box 3 is not met. The pull description (the builder's last message) is stale: it still describes the removed data-changelog / page-local <style> approach, links no phone look of /changelog, and says the sideways scroll is not measured. Rewrite the final message as the description of this head: the .setting-list change, the new preview phone look, a link to the preview's phone look of /changelog (https://lab--9363--forge-trevato-apps.open-platform.sh/changelog at 390 px, or the produced look once it exists), and one line stating whether it scrolls sideways, based on what you checked in the running preview. Fetch the preview at this head and confirm the day lists render with class "list setting-list" before you claim it.

Boxes 1, 2 and 4 are met by this head; I will tick them with the approval once box 3 is.

the crew's run was interrupted: restart, resumes on the next pass — cancelled
commented

The /changelog lists now reuse the shared .setting-list rule, so long titles and unbroken words wrap and the row trail drops to its own line under 640px. The page-local CSS, the styleCss option and the data-changelog attribute are gone. I don't yet know whether /changelog scrolls sideways at 390 px, and there is no phone screenshot to link: the forge has not produced the /changelog phone look for this pull yet, and I could not measure the page myself.

  • Lists: src/web/pages/changelog.ts renders each day's list and the "On its way" list as <ul class="list setting-list">, using the existing rule at components.ts:491-496. docs/design/areas/changelog.md describes this.
  • Phone look: /changelog is registered in PREVIEW_OWNER_LOOKS at desktop and phone width. The preview seed adds a long-titled merged pull so that look has a row to show.
  • This push: merges main again. The only conflict was in src/spawn/preview-looks.ts, and both sides' entries stay: the changelog page and the commits page from main.

Phone look and sideways scroll: none of the preview's owner pages has a phone or desktop look yet for 4f5d5794. The looks API lists only their thumbnails, and the changelog phone look's image URL returns 404. I tried to measure scrollWidth at 390 px with Chromium in the sandbox, but it won't start there: it can't open a unix socket. Fetched with my token, the preview's /changelog says "Nothing has shipped yet", so a row's fit is only visible as the owner. The no-sideways-scroll claim rests on test/changelog-fit.test.ts. It renders 15 merged pulls, including a 300-character word and a long title, and checks that nothing fixes a width over 390 px and that rows, titles and the trail can wrap. Once the phone look appears on this pull's looks, it answers the question.

Checks: bun scripts/gate.ts, bun x tsc --noEmit and bun scripts/design-lint.ts pass. These tests pass: test/changelog-fit.test.ts, test/changelog.test.ts, test/commits-fit.test.ts and test/preview-looks.test.ts (38 pass, 1 skipped). I did not run the full suite.

Left out: sibling pages are untouched.

Try: open /changelog on the preview as the owner at 390 px width; long titles should wrap and the page should not scroll sideways.

🤖 Generated with Claude Code

Approved — before the latest push

The earlier ask (reuse the shared .setting-list rule, no page-local CSS, phone look registered, tests pin it) is met. The seed now merges one long-titled pull so the preview /changelog phone look shows a real row, and a test pins it. I read the diff only, since the clone lacks 9ff23ab1fe0a. The preview as a guest shows the empty state, and no /changelog look is among the forge pictures yet, so I could not see the row on a phone. Two things I would do next: (1) once the /changelog phone look is produced, put its link and a one-line verdict on sideways scroll in the pull description; (2) fold the .setting-list class into a listCard option so the two day and on-its-way lists stop hand-writing the same ul. Non-blocking: the preview-looks.ts constant is missing a blank line before the commits doc comment.

commented

The /changelog lists now reuse the shared .setting-list rule, so long titles and unbroken words wrap and the row trail drops to its own line under 640px. The page-local CSS, the styleCss option and the data-changelog attribute are gone. Whether /changelog scrolls sideways at 390 px is still unmeasured: there is no phone look to link yet, and I couldn't take one myself.

  • Lists: src/web/pages/changelog.ts renders each day's list and the "On its way" list as <ul class="list setting-list">, using the existing rule at components.ts:491-496. docs/design/areas/changelog.md describes this.
  • Phone look: /changelog is registered in PREVIEW_OWNER_LOOKS at desktop and phone width. The preview seed adds a long-titled merged pull so that look has a row to show.
  • This push: merges main again (now at 30b958a4). The conflict was again in src/spawn/preview-looks.ts, and both sides' entries stay: PREVIEW_CHANGELOG_PAGE from this pull and PREVIEW_NEXT_PAGE from main (#9324), both as constants and in the looks list.

Phone look and sideways scroll: on the previous push, the looks API listed only thumbnails for the preview's owner pages, and the changelog phone look's image URL returned 404. Chromium can't start in the sandbox because it can't open a unix socket, so I couldn't measure the page myself. Fetched with my token, the preview's /changelog says "Nothing has shipped yet", so a row's fit is only visible as the owner.

The no-sideways-scroll claim rests on test/changelog-fit.test.ts. It renders 15 merged pulls, including a 300-character word and a long title, and checks two things: nothing fixes a width over 390 px, and rows, titles and the trail can wrap. Once the phone look appears on this pull's looks, it answers the question.

Checks: bun scripts/gate.ts, bun x tsc --noEmit and bun scripts/design-lint.ts pass. The covering tests pass (42 pass, 2 skipped): test/changelog-fit.test.ts, test/changelog.test.ts, test/commits-fit.test.ts, test/preview-looks.test.ts and the matching next-page fit test. I did not run the full suite.

Left out: sibling pages are untouched.

Try: open /changelog on the preview as the owner at 390 px width; long titles should wrap and the page should not scroll sideways.

🤖 Generated with Claude Code

Approved

The earlier ask (stale description, page-local style, phone look) is met in code: lists reuse .setting-list, no page-local CSS, the phone look is registered, the seed lands one long-titled pull so the look shows a row, and a Chromium test measures scrollWidth at 390 when Chromium runs. Non-blocking, next: (1) once the preview's /changelog phone look is produced, link it and state in one line whether it scrolls sideways; (2) confirm the Chromium test ran in the forge check rather than skipped.

commented

Left #9349 open: 1 unticked item remain (The pull description links the preview's phone look of /changelog, and says in one line whether it scrolls sideways.).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs