Public: anyone can read this; the crew can change it.
An app's settings form, visitors and environment names speak the home page's language #9874
Check · Review · Land · Live done — Landed and live in production.
On an app's Settings page, the App form, Visitors and speed, and Environment sections are now plain settings blocks instead of cards. Each has a heading, one sentence, then the form or rows, in the same shape as Settings › Machines. The tests I ran, `tsc`, `design-lint` and `gate` all pass. The `keep_plan` tool wasn't available to me, so no plan is on the issue.
shipped production is serving it deploy 7ab3f87
On an app's Settings page, the App form, Visitors and speed, and Environment sections are now plain settings blocks instead of cards. Each has a heading, one sentence, then the form or rows, in the same shape as Settings › Machines. The tests I ran, tsc, design-lint and gate all pass. The keep_plan tool wasn't available to me, so no plan is on the issue.
- Form and env actions: The form actions and field names are unchanged. Env still shows names only, never values. The env rows now use
setting-list, like the domains and egress rows. - Stop-app card: The stop-the-app section is still a card. The issue didn't name it, and it is the danger-toned one.
- Tests: The new
test/app-settings-page.test.tsrenders the page and asserts that those three sections have noclass="card, keep their headings, and keep their form actions and field names.test/app-settings-timing.test.ts,test/app-vitals-days.test.tsandtest/app-env.test.tsalso pass. - Exports and docs: I exported
appEnvViewfromsrc/web/pages/settings.ts. I added a short note todocs/design/areas/settings.md; there is no new class.
I did not run the full suite, since the forge runs it on push.
The gate failed because no commit message had a Try: line. I added an empty commit with one and pushed it. Locally bun scripts/gate.ts is clean, and I did not re-run the tests, since only a commit message was added. The forge's check will run on this push.
What changed: On an app's Settings page, the App form, Visitors and speed, and Environment sections are now plain settings blocks instead of cards. The form actions and field names are unchanged, and Environment still shows names only, never values. The new test/app-settings-page.test.ts asserts that none of these three sections carries class="card. A short note went into docs/design/areas/settings.md; there is no new class.
What I left out: The stop-the-app section is still a card. The issue didn't name it, and it is the danger-toned one.
Try it: Open /<owner>/<repo>/settings/app on the preview of this pull for an app that is already running.
🤖 Generated with Claude Code
The three views are now settings blocks and the test is real, but two principle-1 breaks (the Environment and Visitors copy) need fixing before approval. Everything else I checked is clean: no card(, form actions and field names kept, env shows names only, docs note added, no new class.
To fix, in one round:
- Environment: the copy is a multi-sentence paragraph. The box asks for a heading, one sentence, then rows or the form. Cut it to one sentence and move the "previews only" explanation into the select hint or docs/features.
- Visitors and speed: it has a link, then a multi-sentence privacy paragraph, then the dl. Say it once in one sentence, and keep the traffic link as a plain row or a link after the facts.
- Check that the now-unused card/icon imports in settings.ts are still used elsewhere, or drop them (tsc passes only if they are).
I did not check the terminal door. This is a re-skin of existing views, so I raise nothing there.
I've cut the Environment and Visitors copy to one sentence each and pushed. web-apps.test.ts passes (27), and tsc and design-lint are clean. I didn't run scripts/gate.ts; the forge's check runs the full suite on the push.
- Environment: the paragraph is now "What the app reads at start-up; values are write-only, and the narrower scope wins." The explanation of everywhere, production-only and previews-only moved into the scope select's
title. I did not move it into the docs. Atitleshows only on hover, so that explanation is easy to miss on touch screens. - Visitors and speed: the privacy paragraph is one sentence, and the traffic link now sits after it, labelled "Where visitors come from". I put the link at the end of that sentence's paragraph rather than as a separate row.
- Imports:
card(is still used 8 times insettings.ts(Who may enter, Domains, Stop running as an app), andtscpasses. I didn't check the icon imports one by one. - Test change: the Environment test asserted the old phrase "never shown again". That wording was dropped, so I changed the assertion to "values are write-only".
I left the terminal door alone, as you did.
I merged main into the branch and pushed it. The only conflict was in docs/design/areas/settings.md, where this pull's #9854 note and main's #9853 General-settings note were added at the same spot. I kept both paragraphs. src/web/pages/settings.ts merged without conflicts.
tsc and design-lint are clean, and test/web-apps.test.ts and test/settings.test.ts pass (33 tests). I didn't run the full suite; the forge's check does that on the push.
main's #9853 paragraph never had a heading of its own, so in the merged file it sits directly under the #9854 section's heading and reads as part of that section. I left it that way and didn't add a heading; one sentence in main's text could be split off if you want it separate.
I merged main into the branch and pushed it. The only conflict was in docs/design/areas/settings.md. This pull's #9854 note and main's new #9872 Flags note were added at the same spot, and I kept both paragraphs.
tsc and design-lint are clean, and test/web-apps.test.ts and test/settings.test.ts pass (33 tests). I did not run the full suite; the forge's check does that on the push.
Under the #9854 heading, the Flags paragraph and the #9853 General paragraph now sit as unlabelled paragraphs with no heading of their own. main added them that way, so I left their placement alone.
The three views are real settings blocks, the test is real, and form actions and field names are kept. Two things to fix before this lands.
- First: the scope explanation now lives only in a
titleon the select. That is hover-only: a phone user with a thumb, or a keyboard or screen reader user, never gets 'Everywhere, production only, or previews only'. Put it where everyone reads it, e.g. as the option labels themselves ('Everywhere', 'Production only', 'Previews only' are already clear) plus a short visible.hint/small line, or drop the title and say the precedence once in the sentence. - The docs note is misplaced: the #9872 Flags and #9853 General paragraphs now sit under the '#9854 An app's form' heading, so they read as part of it. Give them their own headings (or move the #9854 section after them) in docs/design/areas/settings.md.
Boxes 1, 2 and 4 are met; box 3 is met by test/app-settings-page.test.ts. Terminal door untouched, as this is a re-skin. Preview answers 200.
On an app's Settings page, the form, Visitors and speed, and Environment are now .settings-block sections instead of cards. Each has a heading, one sentence, then its facts, rows or form.
- Visitors and speed: one sentence (counted by the beacon, no address kept, the 7-day figure adds the days up), with the link to the traffic page after it, then the stats and sparkline.
- Environment: one visible sentence: "What the app reads at start-up; values are write-only, and one set for production only or previews only wins there over one set everywhere." The scope select keeps its three option labels and has no
title, so the precedence no longer depends on hovering. Variable names stay in a.setting-list. Values are never shown. - Unchanged: every form keeps its action, method and field names. No new class is added.
- Docs:
docs/design/areas/settings.mdrecords the change under its own #9854 heading. The Flags (#9872) and General (#9853) notes that arrived frommainnow have their own headings, so they no longer read as part of #9854. - Tests: in
test/web-apps.test.ts, I changed the Environment assertion from "never shown again" to "values are write-only", because that text was cut on purpose. It also now checks that the precedence sentence is visible and that the scope select has no hover-onlytitle.
tsc and bun scripts/design-lint.ts are clean, and test/web-apps.test.ts, test/settings.test.ts and test/app-settings-page.test.ts pass (34 tests). I did not run the full suite or scripts/gate.ts; the forge's check runs the full suite on push.
The Who may enter, Domains and Stop running as an app sections on the same page are still cards; this pull does not change them.
To try it, open /<owner>/<repo>/settings/app for a repository that runs as an app, as an admin, on the preview at https://lab--9874--forge-trevato-apps.open-platform.sh.
🤖 Generated with Claude Code
Earlier asks are met. The scope explanation is now visible in the Environment sentence and the select has no hover-only title, which a test pins. The Flags (#9872) and General (#9853) notes have their own headings in docs/design/areas/settings.md. The three views are settings-block sections with no card, form actions and field names are kept, env shows names only, and test/app-settings-page.test.ts covers it. This is a re-skin, so the terminal door is unchanged. The rest of the design checks pass, and the head is not in my clone, so I read the change as listed.
On an app's Settings page, three sections become .settings-block sections instead of cards: the app form, Visitors and speed, and Environment. Each now has a heading, one sentence, and then its facts, rows or form.
- Visitors and speed: one sentence: counted by the beacon, no address kept, and the 7 day figure adds the days up. The link to the traffic page follows that sentence, then the stats and the sparkline.
- Environment: one visible sentence says values are write-only and that a variable set for production only or previews only wins there over one set everywhere. The scope select has no
title, so nothing is hover-only. Variable names are rows in a.setting-list, and values are never shown. - Unchanged: every form keeps its action, method and field names, and no new class is added.
- Docs:
docs/design/areas/settings.mdrecords this under its own #9854 heading. The Accounts (#9870), Flags (#9872) and General (#9853) notes that came in frommaineach have their own heading. The latest merge withmainconflicted only in that file, and both sides are kept. - Tests: in
test/web-apps.test.ts, the Environment assertion changed from "never shown again" to "values are write-only", because that sentence was cut on purpose. It also checks that the precedence sentence is visible and that the scope select has notitle.
tsc and bun scripts/design-lint.ts are clean. test/web-apps.test.ts, test/settings.test.ts and test/app-settings-page.test.ts pass (34 tests). I did not run the full suite or scripts/gate.ts; the forge runs the full check on push.
Not changed here: the Who may enter, Domains and Stop running as an app sections on the same page are still cards.
To try it, open /<owner>/<repo>/settings/app as an admin of a repository that runs as an app, on the preview at https://lab--9874--forge-trevato-apps.open-platform.sh.
🤖 Generated with Claude Code
Both earlier asks are met. Environment and Visitors are now one sentence each, and the Environment precedence rule is visible text, not a hover-only title (a test pins that). The three views are settings-block sections with no card. Form actions and field names are kept, env shows names only, and there is no new class. test/app-settings-page.test.ts would fail without the change. The docs note has its own heading. Two things I would do next: (1) Non-blocking: move Who may enter, Domains and Stop running as an app off cards in a follow-up, so the whole page has one shape. (2) Non-blocking: the Visitors sentence now ends in a link inside a muted paragraph, so on a 360px phone give the link its own row if it wraps badly.
On an app's Settings page, the App form, Visitors and speed, and Environment sections are now plain settings blocks instead of cards. Each has a heading, one sentence, then the form or rows, in the same shape as Settings › Machines. The tests I ran,
tsc,design-lintandgateall pass. Thekeep_plantool wasn't available to me, so no plan is on the issue.setting-list, like the domains and egress rows.test/app-settings-page.test.tsrenders the page and asserts that those three sections have noclass="card, keep their headings, and keep their form actions and field names.test/app-settings-timing.test.ts,test/app-vitals-days.test.tsandtest/app-env.test.tsalso pass.appEnvViewfromsrc/web/pages/settings.ts. I added a short note todocs/design/areas/settings.md; there is no new class.I did not run the full suite, since the forge runs it on push.
Closes #9854