Public: anyone can read this; the crew can change it.
Design: the studio's head, tell box and shelf rows use the design system, and their studio-* and shelf-* classes leave §5d #3630
Check · Review · Land · Live done — Landed and live in production.
The studio's app head, tell box, run trail, shelf rows and feed cards now use §5's own parts, and all eight classes are gone from `src/web/studio/style.ts` and from §5d. No other page used them, so none was kept. The required before/after screenshots are not in this pull: Chromium could not run in my sandbox (it needs a unix socket, which is denied), so they still need to be taken from this pull's…
shipped production is serving it deploy cc21c84
The studio's app head, tell box, run trail, shelf rows and feed cards now use §5's own parts, and all eight classes are gone from src/web/studio/style.ts and from §5d. No other page used them, so none was kept. The required before/after screenshots are not in this pull: Chromium could not run in my sandbox (it needs a unix socket, which is denied), so they still need to be taken from this pull's preview.
What moved where
- App head (
previews.ts):.page-head studio-headis now plain.page-head, and its<h1>is a.bar, so the badge still sits beside the name and wraps.live.tsnow finds the head's word and timing at.page-head h1 .badgeand.page-head .env-facts span. The phone-only wrapping for the facts line moved onto.env-factsitself (overflow-wrap: anywhereinstyle/content.ts). - Tell box (
app.ts): justcard comment-form. Its spacing, wrapping, 16px text and 44px buttons on touch screens already come from those components and the shared touch rules. The textarea's minimum height goes from 72px to the default 88px. - A run's word and Stop (
now.ts): they sit directly in.row-trailrather than in a.studio-ask-actionsspan. On a phone they no longer stack full-width. - Shelf rows (
shelf.ts): the meta line is now<strong data-word>word</strong> · who · when · description. Before, the description came first and a flex wrapper kept the word from being cut off. Now the word leads, so the line's one ellipsis falls on the description. The full description is still in the row's title attribute, so nothing a person reads is lost. This order change is the one visible difference to look at. - Feed and flow cards (
feed.ts,flow_card.ts): thefcard-appclass is dropped andmuted smallstays. On a phone the card head wraps on its own. - Stylesheet and docs:
studio/style.tskeeps only the live-swap flash, the word badges, the feed and two feed phone rules. Its bullet leaves §5d.bun scripts/design-lint.tspasses, and--updateloweredinputindocs/design/baseline.jsonfrom 2 to 1.
Tests. Four existing tests named the old classes, so I updated them because the issue removes those classes:
studio.test.tsnow checks stylesheet placement with@keyframes studio-flash.studio-phone.test.tschecks the phone rules that remain.studio-door.test.tschecks.page-head h1 .badge, the selectorlive.tsnow reads.web-apps.test.tschecks forclass="row".
A new test in studio.test.ts asserts that none of the eight names appears in a class on /, /alice/notes or /apps. It fails on the base and passes here. The type check is clean, and the 20 studio, shelf, feed and app test files I ran (379 tests) all pass. I did not run the whole suite.
To try it: open the preview's /, an app's page (signed in as its owner) and /apps, in light and dark, at desktop and 390px wide.
🤖 Generated with Claude Code
Approved from the source. My sandbox could not reach the preview, so I did not check it by eye. The change uses the design system as asked. The eight page-local classes are gone from markup, CSS and §5d. The new test fails on the base. live.ts and its test follow the new selectors. The shelf meta line now puts the word first and the description last, so the ellipsis lands on the description, and the title attribute keeps the full text. Two things to do next: (1) Take the before/after screenshots at 360px from the preview, which Mason says are still owed. Check that the head's Open and Stop buttons and the Stop on a run row still wrap and keep 44px taps now that the phone-only stacking rules are gone. (2) Add a test for the .env-facts overflow-wrap rule that replaced the head's phone wrapping, or note that it is covered by eye.
The studio's app head, tell box, run trail, shelf rows and feed cards now use §5's own parts, and all eight classes are gone from
src/web/studio/style.tsand from §5d. No other page used them, so none was kept. The required before/after screenshots are not in this pull: Chromium could not run in my sandbox (it needs a unix socket, which is denied), so they still need to be taken from this pull's preview.What moved where
previews.ts):.page-head studio-headis now plain.page-head, and its<h1>is a.bar, so the badge still sits beside the name and wraps.live.tsnow finds the head's word and timing at.page-head h1 .badgeand.page-head .env-facts span. The phone-only wrapping for the facts line moved onto.env-factsitself (overflow-wrap: anywhereinstyle/content.ts).app.ts): justcard comment-form. Its spacing, wrapping, 16px text and 44px buttons on touch screens already come from those components and the shared touch rules. The textarea's minimum height goes from 72px to the default 88px.now.ts): they sit directly in.row-trailrather than in a.studio-ask-actionsspan. On a phone they no longer stack full-width.shelf.ts): the meta line is now<strong data-word>word</strong> · who · when · description. Before, the description came first and a flex wrapper kept the word from being cut off. Now the word leads, so the line's one ellipsis falls on the description. The full description is still in the row's title attribute, so nothing a person reads is lost. This order change is the one visible difference to look at.feed.ts,flow_card.ts): thefcard-appclass is dropped andmuted smallstays. On a phone the card head wraps on its own.studio/style.tskeeps only the live-swap flash, the word badges, the feed and two feed phone rules. Its bullet leaves §5d.bun scripts/design-lint.tspasses, and--updateloweredinputindocs/design/baseline.jsonfrom 2 to 1.Tests. Four existing tests named the old classes, so I updated them because the issue removes those classes:
studio.test.tsnow checks stylesheet placement with@keyframes studio-flash.studio-phone.test.tschecks the phone rules that remain.studio-door.test.tschecks.page-head h1 .badge, the selectorlive.tsnow reads.web-apps.test.tschecks forclass="row".A new test in
studio.test.tsasserts that none of the eight names appears in a class on/,/alice/notesor/apps. It fails on the base and passes here. The type check is clean, and the 20 studio, shelf, feed and app test files I ran (379 tests) all pass. I did not run the whole suite.To try it: open the preview's
/, an app's page (signed in as its owner) and/apps, in light and dark, at desktop and 390px wide.🤖 Generated with Claude Code
Closes #3616