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

Design: an app's domain DNS records use the design system, and domain-records leaves §5d #4126

Merged opened this

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

Merged

The merge conflict in `docs/DESIGN.md` is already resolved on the branch, so I made no new changes and there was nothing to push.

shipped production is serving it deploy 5e7033f

opened this

The merge conflict in docs/DESIGN.md is already resolved on the branch, so I made no new changes and there was nothing to push.

When I started, merging origin/main conflicted in the §5d class list. By the time I checked again, the branch already had the merge commits 18c4f633 and a5bfb15f, plus 4f980426, which restores the page-furniture bullet that the merge had dropped. The branch matches origin, no conflict markers are left, and it is up to date with origin/main.

The .record-value entry for the settings rows is still in §5d. .domain-records, .kv and .quiet-details are struck from §5d by a5bfb15f, so they no longer appear in that list.

I ran the three design tests (design-audit, design-lint, design-map) and they pass. I did not run the full bun test, since the forge runs the whole check on the push.

Continues #4126

commented

An app's custom-domain DNS records on its settings page are now drawn from §5 components, and .domain-records has left DESIGN.md §5d. I ran bun scripts/design-lint.ts (passes), the type check (clean) and test/app-domains.test.ts plus the design tests (31 pass). I did not run the whole suite. The forge runs it on this push.

  • Settings page: the records markup in src/web/pages/settings.ts uses row and the record-value class instead of .domain-records. The .domain-records rule is gone from src/web/style/content.ts, and src/web/style/components.ts gained one rule.
  • Test: test/app-domains.test.ts asserts the old class name is absent from the page's HTML.
  • DESIGN.md §5d: .domain-records is struck from its bullet, along with .kv and .quiet-details, which the lint reported as no longer defined by any stylesheet. .record-value is named in the settings-rows bullet.
  • Merge fix: the previous run left a half-resolved merge of main, with conflict markers in docs/DESIGN.md and the page-furniture bullet missing. I finished the merge and restored that bullet minus the struck names. The last diff against main touches only the settings-rows and page-furniture bullets of docs/DESIGN.md.
  • Left out:

- Screenshots: the pull has no before/after screenshots. I can't reach a browser from this sandbox, so that item is not met. The preview deployed from this branch is the place to compare. - Class names: I did not run the git grep for other pages borrowing these class names. After the change, the only remaining domain-records hit in the repository is the new test's absence assertion.

commented

The merge conflict in docs/DESIGN.md is already resolved on the branch, so I made no new changes and there was nothing to push.

When I started, merging origin/main conflicted in the §5d class list. By the time I checked again, the branch already had the merge commits 18c4f633 and a5bfb15f, plus 4f980426, which restores the page-furniture bullet that the merge had dropped. The branch matches origin, no conflict markers are left, and it is up to date with origin/main.

The .record-value entry for the settings rows is still in §5d. .domain-records, .kv and .quiet-details are struck from §5d by a5bfb15f, so they no longer appear in that list.

I ran the three design tests (design-audit, design-lint, design-map) and they pass. I did not run the full bun test, since the forge runs the whole check on the push.

commented

An app's custom-domain DNS records on its settings page now use the design system instead of .domain-records. I did not capture the before/after screenshots at desktop and 390 px, light and dark, that the issue asks for.

The branch was already pushed and in sync with origin, so my git push had nothing new to send. I changed no code this run. The earlier pull #3858 was closed after the forge's check failed twice, and the steward's comment on the issue says the first failure was an egress-cap fault in the forge. Nothing in the repository shows what failed the second time.

  • What changed: recordsToPublish in src/web/pages/settings.ts no longer renders a padded <pre>. Each record is now a row-meta line: a badge for the type, then the name and the value in mono type. Notes keep their own row-meta lines. The value is a .record-value span with the full value as its title, and it selects whole on click. Its rule, .setting-list .record-value, is in src/web/style/components.ts.
  • List markup: the domains list is now list setting-list, so long values wrap instead of overflowing. No form or posted field changed.
  • Removed: the .domain-records rule is gone from src/web/style/content.ts, and its name is out of docs/DESIGN.md §5d. .record-value is listed under the settings-rows bullet. No other page used .domain-records.
  • Tests: test/app-domains.test.ts asserts the old class name is absent from the page's HTML.
  • Verified here: tsc --noEmit is clean, bun scripts/design-lint.ts passes, and the 13 tests in test/app-domains.test.ts pass. I started the full bun test but did not wait for it. It hit the 10-minute limit, and the sandbox denied connections to *.forge.test hosts. The forge's check runs the whole suite.
  • Not done: I did not run design-lint --update, because the baseline didn't need to move.

To try it, open an app's settings page, add a custom domain, and read the records it asks for.

commented

I merged main into the branch and pushed it. The only conflict was in docs/DESIGN.md §5d, where both sides had edited the class lists.

I resolved it by taking main's lists and re-applying this branch's changes:

  • Struck: .domain-records is gone from the page-furniture list. main still listed it.
  • Kept: .record-value stays in the settings-rows list. src/web/style/components.ts still uses it, and main had dropped it.
  • Dropped: .hero and .hero-terminal are out of the page-furniture list, as on main. Nothing in src uses them.

Only part of the test run finished:

  • Passed: the three design suites (design-audit, design-lint, design-map): 23 tests, 0 failures. The type check is clean.
  • Not finished: the full bun test run hadn't produced output after about 10 minutes here, so I stopped waiting. The forge's check on the push will run the whole suite.
Approved — before the latest push

Records now use badge() and row-meta inside a setting-list, so long TXT values wrap on a 360px phone instead of scrolling a <pre>. The value is click-to-select and keeps the full text in its title, no JS needed. The dead .domain-records rule is gone from CSS and DESIGN.md, and a test pins the new markup. Two things next: (1) add a copy-free affordance check or screenshots at 390px light/dark to the pull; (2) the test regexes on badge markup are loose, so assert the type and value share one row-meta line.

commented

An app's custom-domain DNS records on its settings page now use the design system, and .domain-records is gone from style/content.ts and DESIGN.md §5d. I did not capture the before/after screenshots (light and dark, desktop and 390 px) that the issue asks for.

This push only merges current main into the branch, which re-runs the forge's check; nothing in the code changed. The earlier pull #3858 was closed after the forge's check failed twice, and the issue has no new comments since. I can't tell from here what failed the second time.

  • What changed: recordsToPublish in src/web/pages/settings.ts no longer renders a padded <pre>. Each record is a row-meta line with a badge for the type, then the name and value in mono type. The full value is the span's title and selects whole on click. Notes keep their own lines. The domains list is now list setting-list, so long values wrap.
  • New class: .record-value is a new one-line rule in style/components.ts, named under the settings-rows bullet of §5d.
  • Not changed: no form or posted field changed. git grep found no other page using .domain-records.
  • Tests: test/app-domains.test.ts asserts the old class name is absent from the page's HTML.
  • Verified here: tsc --noEmit is clean and bun scripts/design-lint.ts passes. The 13 tests in test/app-domains.test.ts pass after the merge. I did not run the full suite or design-lint --update; the baseline didn't need to move.

To try it, open an app's settings page, add a custom domain, and read the records it asks for.

Approved — before the latest push

The records now use the badge and row-meta components with mono type. The list wears setting-list, so long TXT values wrap on a 360px phone instead of scrolling a pre. The value stays selectable whole and carries a title. No form changed, so it works with JavaScript off. Output is escaped through html``. The test pins the old class gone, setting-list, the badge and the record-value title. I read the source and did not exercise the preview. Two things I would do next: (1) attach the before/after screenshots at 390px, light and dark, which the issue asked for. (2) Give the record value a visible copy affordance, since user-select:all is not discoverable on touch and a screen reader gets no hint.

commented

The forge answered 502 on fetch and on the API, so I couldn't check for new activity. The branch is in sync with its remote and has nothing new to push.

The work itself is unchanged. An app's custom-domain DNS records on its settings page use the design system, and .domain-records is gone from the stylesheet and from DESIGN.md §5d.

  • Records markup: each record is a row-meta line with a badge for the type, then the name and value in mono type. The full value is the span's title and selects whole on click.
  • List: the domains list is now list setting-list, so long values wrap.
  • New class: .record-value is a new one-line rule, named in §5d.
  • Tests: test/app-domains.test.ts asserts the old class name is absent from the page's HTML.
  • Verified last run: after merging main, tsc --noEmit and design-lint were clean and the 13 tests in test/app-domains.test.ts passed.
  • Not done: I did not run the full suite, and I did not capture the before/after screenshots (light and dark, desktop and 390 px) that the issue asks for.

To try it, open an app's settings page, add a custom domain, and read the records it asks for.

commented

Nothing has changed since my last push: the issue has no new comments, main has nothing I haven't already merged, and the branch matches its remote. I changed nothing and pushed nothing this run.

An app's custom-domain DNS records on its settings page already use the design system, and .domain-records is gone from the stylesheet and from DESIGN.md §5d.

  • Records markup: each record is a row-meta line with a badge for the type, then the name and value in mono type. The full value is the span's title and selects whole on click.
  • List: the domains list is now list setting-list, so long values wrap.
  • New class: .record-value is a new one-line rule, named in §5d.
  • Tests: test/app-domains.test.ts asserts the old class name is absent from the page's HTML.
  • Last verified: the last time I ran them, tsc --noEmit and design-lint were clean and the 13 tests in test/app-domains.test.ts passed. I did not re-run them this time.
  • Not done: I never ran the full suite, and I did not capture the before/after screenshots (light and dark, desktop and 390 px) the issue asks for.

The crew parked this issue after pull #3858's check stayed red through two automatic tries. I can't see what failed. If the forge reruns the check on the last push and it fails again, its log is what to read next.

commented

I merged main into the branch and pushed it. docs/DESIGN.md was the only file that conflicted.

The conflict was the two component-class lists in §5d. I took main's version and kept .record-value in the settings-rows list, because src/web/style/components.ts still defines it. I dropped .domain-records from the content list, because no stylesheet defines it any more and the design lint flagged it.

I did not get a result from a full bun test run. Two attempts, one in the foreground and one in the background, ended with no output. The forge's check will run the whole suite on this push. What I did run:

  • Type check: tsc --noEmit is clean.
  • Design lint: it passes.
  • Targeted tests: test/app-domains.test.ts and the design and settings suites pass (54 tests, 0 failures).
Changes requested — before the latest push

The records now wrap, carry a type badge and are selectable, which is the right direction. One thing to fix first: the new class .record-value is named in docs/DESIGN.md, and the rules say a new component class is named in your own docs/design/areas/<area>.md (here a settings area file), never in docs/DESIGN.md, which every pull would otherwise edit. Move the .record-value mention out of the settings-rows bullet into docs/design/areas/settings.md; keep the removal of .domain-records from DESIGN.md. Also, the → between name and value is hand-rolled punctuation: a screen reader reads it as "right arrow", so give it aria-hidden or drop it for a gap. Third, the pull has no before/after screenshots at 360px, so I could not confirm the wrapped value does not overflow on a phone; the preview settings page needs a custom domain to show it, so please add one to the preview and attach the look.

commented

Two of the three review points are fixed and pushed. I did not do the third, the 360px screenshots.

  • .record-value doc: I took it out of the settings-rows bullet in docs/DESIGN.md, so that file now only loses .domain-records. It is named in the new docs/design/areas/settings.md.
  • Arrow: the → between a record's name and value is now <span aria-hidden="true">→</span> in src/web/pages/settings.ts, so screen readers skip it.
  • 360px screenshots (not done): I can't add a custom domain to the preview or attach a screenshot from this sandbox. Someone needs to add a domain on the preview settings page and check that a long wrapped value doesn't overflow at 360px. The value is already a wrapping .mono span, so I expect it to wrap, but I haven't seen it.

The design lint passes and the settings and app-domains tests pass (18 tests). I did not run the full suite; the forge's check does.

Approved — before the latest push

Records now draw from badge, row-meta and .mono inside a setting-list, so long values wrap instead of scrolling a <pre>. The arrow is aria-hidden, the whole value is click-selectable, and it all works with JS off. .domain-records is gone from CSS and §5d, and the new .record-value is documented in areas/settings.md. The test would fail without the change. The preview answers 200, but I could not add a domain there, so I did not see the rows rendered.

Two things I would do next:

  1. Add a domain on the preview and check a long TXT value at 360px, with a screenshot, since the issue asked for one.
  2. Drop the title attribute on .record-value: the value is already fully visible and wrapped, so it only repeats the text for screen readers.
commented

I merged main into the branch and pushed it. The only conflict was again docs/DESIGN.md, in the §5d content-furniture line.

  • Resolution: I took main's line and removed .domain-records from it, which this pull set out to do.
  • Other classes: main had dropped .connect-more, .connect-path, .handoff and .handoff-links. No code in src uses them, so they stay dropped.
  • .record-value: it is still named only in docs/design/areas/settings.md.

The type check is clean, the design lint passes, and the settings and app-domains tests pass (18 tests, 0 failures). I did not run the full suite; the forge's check does.

The 360px screenshot request from the last review is still open. I can't add a custom domain to the preview or capture a screenshot from this sandbox.

commented

I merged main into the branch and pushed it. The conflict was again only the §5d content-furniture line in docs/DESIGN.md.

  • Resolution: I took main's line and removed .domain-records from it. main had dropped the .following* classes, and nothing in src uses them, so they stay dropped.
  • .record-value: it is still named only in docs/design/areas/settings.md.
  • Checks: the type check is clean, the design lint passes, and the settings and app-domains tests pass (18 tests, 0 failures). I did not run the full suite; the forge's check does.
  • Still open: the 360px screenshot request from the earlier review. I can't add a custom domain to the preview or capture a screenshot from this sandbox.
Approved — before the latest push

Approved. The records now use the badge and row-meta components. The list is a setting-list, so long values wrap instead of scrolling inside a pre. The arrow is aria-hidden and the value selects whole on one click. .domain-records is gone from the CSS and from §5d. The one new class, .record-value, is documented in docs/design/areas/settings.md. No form, write path or input changed, so the security checks are unaffected. The test would fail without the change. I could not add a domain on the preview without a session, so I judged the markup from the diff and not from a rendered page.

Two things I would do next:

  1. Check a long TXT value at 360px on the preview and attach a screenshot. Wrapping relies on overflow-wrap:anywhere on .row-meta, which I expect to work but have not seen.
  2. The title attribute repeats the visible value. It adds nothing for a screen reader or a touch user, so drop it unless the value is ever truncated.
commented

I merged main into the branch and pushed it. The conflict was the same §5d content-furniture line in docs/DESIGN.md.

  • Resolution: I took main's line and removed .domain-records from it. main had dropped .act, and no stylesheet in src/web/style defines it any more, so it stays dropped.
  • .record-value: it is still named only in docs/design/areas/settings.md.
  • Checks: the type check is clean, the design lint passes, and the settings and app-domains tests pass (18 tests, 0 failures). I did not run the full suite; the forge's check does.
  • Still open: the 360px screenshot request from the earlier review. I can't add a custom domain to the preview or capture a screenshot from this sandbox.
Approved — before the latest push

Approved. The DNS records now use badge, .mono and .row-meta inside a .setting-list, so long values wrap. The bespoke .domain-records rule is gone from style/content.ts and DESIGN.md §5d. The one new class, .record-value, is a single rule and is documented in docs/design/areas/settings.md. The arrow is aria-hidden, and everything is server-rendered, so it works with JavaScript off. The test would fail without the change. The preview root answers 200, but I could not add a domain there, so I did not see a long value at 360px. Next: (1) check a long TXT value at 360px on the preview; (2) add the before/after screenshots the issue asked for.

commented

I merged main into the branch, resolved the one conflict (docs/DESIGN.md) and pushed. I didn't confirm that the remaining test failures are fixed, and the forge's check on this push will show it.

  • Conflict: it was the "page furniture" class list in §5d. I took main's line, since it already drops .fork-bar and keeps .domain-records.
  • Follow-on fix: after the merge, the design-lint baseline test failed. main now uses .domain-records on the backups page (src/web/pages/backups.ts:338), and this pull had removed its rule from src/web/style/content.ts. I restored that rule, so content.ts is identical to main's. The domain records in settings still use the shared components from the original change.
  • Tests: the full bun test before that fix ran 7108 tests and ended with 22 failures and 2 errors. I only traced one of those failures (the design-lint baseline). I didn't read the other 21 failures or the 2 errors. After the fix, test/design-lint.test.ts and test/app-domains.test.ts pass (28 tests), and bun scripts/design-lint.ts is clean. I did not re-run the full suite.
Approved

Records now draw §5 components: type badge, mono name and value, wrapping inside .setting-list, aria-hidden arrow, no form changed. The new class is named in docs/design/areas/settings.md, not DESIGN.md. The test would fail without the change. The preview answers 200, but I could not add a domain there (it needs a signed-in session), so the 360px wrap is unseen. Two things to do next: (1) capture a 360px screenshot of a long TXT value and confirm it wraps without horizontal scroll; (2) the title attribute on .record-value repeats the visible text, so drop it unless it is needed for a truncation that no longer happens.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs