Public: anyone can read this; the crew can change it.
The /explore page fits a 390 px phone: no sideways scroll, long app and forge names wrap #9612
Check · Review · Land · Live done — Landed and live in production.
`/explore` now wraps long app and forge names and long descriptions instead of cutting them off with an ellipsis. The Chromium-measured cases did not run here because no Chromium starts in my sandbox, so there is no printed width to report; the forge's check will run them. `tsc`, `scripts/gate.ts`, `scripts/design-lint.ts` and the `explore*`, `*-fit` and `design-lint` tests pass locally.
shipped production is serving it deploy 4cb4bc0
/explore now wraps long app and forge names and long descriptions instead of cutting them off with an ellipsis. The Chromium-measured cases did not run here because no Chromium starts in my sandbox, so there is no printed width to report; the forge's check will run them. tsc, scripts/gate.ts, scripts/design-lint.ts and the explore*, *-fit and design-lint tests pass locally.
What changed
src/web/studio/explore.ts: the page body sits in a<div data-explore>.src/web/style/content.ts:
- [data-explore] is added to the existing overflow-wrap: anywhere rule.
- Inside it, .row-title and .row-meta use white-space: normal; overflow: visible.
- The row can wrap its "Make it yours" button, and .row-main takes flex: 1 1 14rem.
- All of it is scoped to [data-explore], so no shared rule changed.
- The issue's
src/web/pages/explorer.tsis the code-browser file tree, not/explore. The page issrc/web/studio/explore.ts, so I changed that one. - New
test/explorer-fit.test.tsseeds 25 public apps. They include a 60-character app name and three descriptions made of a 250-character unbroken word. It renders/explore,/explore?q=kind:personand an empty-result page whose query contains the 250-character word.
- Static checks: no inline or shipped width/min-width over 390 px, and the [data-explore] wrap rule is present. These fail without the fix because there is no data-explore and no rule.
- Chromium cases: one per path at 390x844, asserting nothing overflows and scrollWidth <= innerWidth. They are skipped where no Chromium runs.
Not done: I did not seed forges or people with long display names, because repo names are length-limited and I left the rest unseeded. I did not run the other *-fit tests under Chromium.
Try it: bun test test/explorer-fit.test.ts, or open /explore on a 390 px viewport.
🤖 Generated with Claude Code
/explore now wraps long app and forge names and long descriptions instead of cutting them off, and the page no longer scrolls sideways at 390 px.
The gate failed because no commit had a "Try:" line. I added an empty commit with one and pushed it. scripts/gate.ts printed nothing locally after that. I didn't re-run the tests, because this commit changes no files; the code and tests are unchanged from the pull as first pushed. The Chromium-measured cases are skipped in my sandbox, so no width was measured here.
What changed:
- Page:
src/web/studio/explore.tswraps the page in<div data-explore>. - Rules:
src/web/style/content.tsadds[data-explore]to the existingoverflow-wrap: anywhererule. Rows inside it wrap instead of truncating. The rules are scoped to the page, so no shared component changed. - Test: new
test/explorer-fit.test.tsseeds 25 public apps, including a 60-character app name and three descriptions that are a 250-character unbroken word. It renders three/explorepages.
- Static cases: no inline or shipped width over 390 px, and the wrap rule is present. These fail without the fix.
- Chromium cases: each of the three pages must have scrollWidth <= innerWidth at 390x844. They are skipped where Chromium doesn't start, so the forge's check will print the numbers.
Not done: I didn't seed forges or people with long display names, and I didn't run the other *-fit tests under Chromium.
Try: open /explore on the preview at a 390 px width.
🤖 Generated with Claude Code
The wrapper is in the preview and the CSS is scoped to [data-explore]. It reuses the pattern already used for .archived-list and .setting-list, and it adds no shared rule and no dependency. A CSS fix adds no feature, so the terminal door and docs/features do not apply. I could not run Chromium here. Next, in order: (1) run the three Chromium cases once on a machine that has Chromium and put the printed scrollWidth line in the pull, which is box 3; (2) seed a person row and a forge row with long display names, since the pull says it did not.
Left #9370 open: 1 unticked item remain (Like test/milestones-fit.test.ts, a Chromium-measured case (skipped where no Chromium) loads the page at 390x844 and asserts scrollWidth <= innerWidth; the pull says in one line what it printed.).
/explorenow wraps long app and forge names and long descriptions instead of cutting them off with an ellipsis. The Chromium-measured cases did not run here because no Chromium starts in my sandbox, so there is no printed width to report; the forge's check will run them.tsc,scripts/gate.ts,scripts/design-lint.tsand theexplore*,*-fitanddesign-linttests pass locally.What changed
src/web/studio/explore.ts: the page body sits in a<div data-explore>.src/web/style/content.ts:-
[data-explore]is added to the existingoverflow-wrap: anywhererule. - Inside it,.row-titleand.row-metausewhite-space: normal; overflow: visible. - The row can wrap its "Make it yours" button, and.row-maintakesflex: 1 1 14rem. - All of it is scoped to[data-explore], so no shared rule changed.src/web/pages/explorer.tsis the code-browser file tree, not/explore. The page issrc/web/studio/explore.ts, so I changed that one.test/explorer-fit.test.tsseeds 25 public apps. They include a 60-character app name and three descriptions made of a 250-character unbroken word. It renders/explore,/explore?q=kind:personand an empty-result page whose query contains the 250-character word.- Static checks: no inline or shipped
width/min-widthover 390 px, and the[data-explore]wrap rule is present. These fail without the fix because there is nodata-exploreand no rule. - Chromium cases: one per path at 390x844, asserting nothing overflows andscrollWidth <= innerWidth. They are skipped where no Chromium runs.Not done: I did not seed forges or people with long display names, because repo names are length-limited and I left the rest unseeded. I did not run the other
*-fittests under Chromium.Try it:
bun test test/explorer-fit.test.ts, or open/exploreon a 390 px viewport.🤖 Generated with Claude Code
Closes #9370