Skip to content

Add font size and conversation density preferences - #5644

Open
klopez4212 wants to merge 24 commits into
mainfrom
kennylopez-inter-typography-staging
Open

Add font size and conversation density preferences#5644
klopez4212 wants to merge 24 commits into
mainfrom
kennylopez-inter-typography-staging

Conversation

@klopez4212

@klopez4212 klopez4212 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add separate Font size and Conversation density controls in Appearance.
  • Use a 13 / 14 / 15px conversation text ramp for Smaller / Default / Larger while scaling interface typography through a shared virtual-rem system.
  • Keep layout geometry fixed while typography changes, and compose Cmd +/- text zoom on top of the selected preference.
  • Let Compact, Comfy, and Spacious control conversation row spacing plus paragraph and list rhythm in Markdown content across Buzz.
  • Preview font size and density together with click-and-drag comparison; interrupted scrubbing restores the saved preference.
  • Synchronize preferences across open Buzz windows, including full local-storage clears during sign-out or dev reset.
  • Promote the segmented control to shared UI and make Settings rows adapt to their card width.

Validation

  • just ci
  • 4,965+ desktop unit tests across the final merged branch
  • 1,465 mobile tests through the full repository gate
  • Focused Playwright coverage for font-size/density independence, drag preview cancellation, Inbox geometry, thread rendering, keyboard zoom, and cross-surface typography
  • Fresh E2E build against the final merged branch

Signed-off-by: kenny lopez <klopez4212@gmail.com>
klopez4212 added a commit that referenced this pull request Aug 12, 2026
Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212 klopez4212 changed the title Add conversation density preference Add conversation display preferences Aug 12, 2026
klopez4212 added a commit that referenced this pull request Aug 12, 2026
Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212 klopez4212 changed the title Add conversation display preferences Add font size and conversation density preferences Aug 12, 2026
klopez4212 added a commit that referenced this pull request Aug 12, 2026
Signed-off-by: kenny lopez <klopez4212@gmail.com>
@klopez4212
klopez4212 marked this pull request as ready for review August 12, 2026 12:07
@klopez4212
klopez4212 requested a review from a team as a code owner August 12, 2026 12:07
@klopez4212

Copy link
Copy Markdown
Contributor Author

🤖 Updated font size and conversation density snapshots.

Default font + Comfy density

15px standard text with balanced conversation spacing.

14-conversation-preferences

Larger font + Compact density

16px standard text while conversation spacing stays compact.

15-conversation-compact-larger

Smaller font + Spacious density

Current production typography while conversations keep more breathing room.

16-conversation-spacious-smaller

klopez4212 added a commit that referenced this pull request Aug 12, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f92c81c10

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/src/shared/styles/globals/theme.css Outdated
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a9fa4f299

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/src/main.tsx
Comment thread desktop/src/shared/lib/fontSizePreference.ts
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6166fa1cd7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/src/app/useWebviewZoomShortcuts.ts
Comment thread desktop/src/shared/lib/fontSizePreference.ts
Princess Donut added 2 commits August 12, 2026 14:28
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
@klopez4212

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 17db6c99ce

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Princess Donut added 2 commits August 12, 2026 14:59
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Co-authored-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>
Signed-off-by: Princess Donut <b238ea756dee4d98afa5883fc7f1de61eeabe65bf700e3a5a5a80db5e42e2c2b@buzz.block.builderlab.xyz>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d914d31f73

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread desktop/src/features/messages/ui/MessageRow.tsx
Comment thread desktop/src/shared/ui/markdown.tsx
…yout previews

- Font size ramp is now 13/14/15px (Smaller/Default/Larger) so Default
  matches production's 14px standard text instead of bumping everyone up
- Links and Thread layout switch from dropdowns to the same segmented
  control as Font size and Conversation density, with scrub-to-preview
- SettingsSegmentedControl derives its columns from the option count
  (was hardcoded 3); legend moved off the grid so it can't skew layout
- New live previews: a sample link card (Buzz-gradient SVG thumbnail
  baked from theme tokens) and a thread layout diagram (inline SVG on
  theme tokens) that follow the displayed/scrubbed option
- Each setting row + its preview grouped as one container so the shared
  divider no longer separates a preview from its controls
- Preview tag restyled as a quiet uppercase annotation, not a control
- previewLinkPreviewStyle/previewThreadViewMode override hooks added,
  matching the existing previewFontSize pattern

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
The virtual typography rem values changed when Smaller/Default/Larger
moved from 14/15/16px to 13/14/15px standard text; the tests assert
exact --buzz-type-rem pixel values and needed the new expectations.

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
@klopez4212
klopez4212 marked this pull request as draft August 13, 2026 06:36
…graphy-staging

* origin/main:
  Harden shared agent instruction review (#4220)
  chore(release): release Buzz Desktop version 0.5.11 (#5714)
  feat(acp): report standard adapter usage (#4950)
  fix(mobile): settle hydrated threads on latest reply (#4702)
  perf(desktop): persist channel snapshot hash (#5684)
  fix(agent): raise output limit and allow 3 recoveries (#5475)
  fix(desktop): defer foreground resume work (#5696)
  perf(desktop): coalesce thread-activity localStorage writes (#5693)
  Batch observer-store publications per relay envelope (#5680)
  feat(buzz-acp): idle re-sleep for woken lazy pools (#5682)
  fix(desktop): preserve agent mention separator after send (#5623)
  fix(link-previews): proxy sent preview media (#5627)
  feat(deletion): add durable whole-community deletion (#4425)
  fix(desktop): preserve live channel timelines (#5662)
  Refine channel settings and profile panels (#5574)
  fix(deps): bump webbrowser to 1.2.4 for RUSTSEC-2026-0257 (#5659)
  feat(acp): deliver channel description in prompt [Context] (#4552)
  fix(desktop): launch Databricks OAuth from passive model discovery (#5607)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
…graphy-staging

* origin/main:
  Make workflow run history authoritative in Desktop (#5780)
  fix(desktop): more compact "compact" link previews (#5629)
  Fix mobile composer input regressions (#5594)
  Add mobile community invites (#5641)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
…graphy-staging

* origin/main: (41 commits)
  docs: refresh agent development guidance (#6049)
  feat(mobile): require device authentication for identity export (#5116)
  fix(desktop): hide the offcanvas-collapsed sidebar so it stops painting over the community rail (#5947)
  Polish mobile message threads and composer (#5645)
  chore(release): release Buzz Desktop version 0.5.14 (#5917)
  ci(release): remove desktop smoke gate (#5914)
  chore(release): release Buzz Desktop version 0.5.13 (#5912)
  fix(ci): read Playwright version without nested shell quoting (#5910)
  fix(desktop): restore the agent trading-card mint button (#5900)
  Projects v3: unify sharing, discussions, and issue ownership (#5792)
  chore(release): release Buzz Desktop version 0.5.12 (#5903)
  fix(mobile): unwrap batched observer telemetry (#5805)
  perf(desktop): update active turns incrementally (#5897)
  fix(link-previews): send while previews finish in background (#5697)
  fix(desktop): cut steady-state relay traffic from polls and read-state echo (#5879)
  fix(desktop): support channel message path links (#5889)
  feat(mobile-messages): render compact Buzz permalink chips (#5639)
  test(desktop): await channel E2E bridge readiness (#5886)
  fix(link-preview): refetch a link when it re-enters the composer (#5510)
  feat(desktop-messages): render compact Buzz permalink chips (#5638)
  ...

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>

# Conflicts:
#	desktop/src/features/home/ui/InboxListPane.tsx
#	desktop/src/features/home/ui/InboxMessageRow.tsx
#	desktop/src/features/messages/ui/MessageAgentOwner.tsx
#	desktop/src/features/settings/ui/SettingsOptionGroup.tsx
#	desktop/src/features/settings/ui/SettingsPanels.tsx
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
…graphy-staging

* origin/main:
  Remove GitHub security advisory commitment (#6144)
  Rename Bumble agent to Pollen (#5864)
  fix(desktop): resolve agent profiles through one archive-aware selector (#5706)
  fix(acp): gate relay-signed workflow messages on their attributed author (#6129)
  fix(acp): replace Goose native system prompt (#5964)
  feat(workflows): add responsive library card actions (#6008)
  fix(desktop): enforce shared agent access across devices (#6086)
  feat(model-capabilities): drive model capabilities and labels from one manifest (#5597)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
@morgmart
morgmart marked this pull request as ready for review August 17, 2026 21:56
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
…graphy-staging

* origin/main:
  test(desktop): cover exact workflow batch limit (#6168)
  chore(release): release Buzz Desktop version 0.5.15 (#6173)
  Preserve managed agent mentions during relay errors (#6167)
  fix(workflows): preserve multi-channel listing semantics (#6009)
  Remove Startup Recovery section in base prompt (#6161)
  fix(desktop): align preview sidebar row styling (#6163)
  fix(desktop): repair dropped team membership links at boot and on edit (#5904)
  fix(cli): keep project replacement timestamps at or after wall clock (#5666)

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>

@jedwards27 jedwards27 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: REQUEST CHANGES

Reviewed: f8692fa9b52ddcfeb4b95fb4862109983509f131..f0a8ef938a39ff3b8f473b8a0ba4ae002d7771f6 (exact head f0a8ef938a39ff3b8f473b8a0ba4ae002d7771f6)

Risk: medium — app-wide, persisted typography and density state with cross-window synchronization and keyboard-zoom composition.

Blocking finding

A full storage clear leaves the old keyboard zoom multiplier live in other open windows.

desktop/src/shared/lib/fontSizePreference.ts:22-23,42-51,58-72 keeps textZoomFactor only in module memory. Its storage listener handles event.key === null, but it reloads only buzz.appearance.fontSize and reapplies Default through that stale multiplier. Separately, desktop/src/app/useWebviewZoomShortcuts.ts:64-85,91-96,122-125 reads buzz:text-scale only on mount and does not listen for storage changes, so neither its live factor nor zoomFactorRef resets when another window calls localStorage.clear().

I reproduced this from a clean checkout: after Larger + 1.5× keyboard zoom, dispatching the full-clear storage event changes data-font-size to default but leaves --buzz-type-rem at 24px; Default should be 16px. The next Cmd-minus also starts from the stale ref. That breaks the PR's explicit contract to synchronize preferences across open windows, including full local-storage clears during sign-out/dev reset.

Please synchronize/reset the keyboard text-scale state on the same storage boundary, including key === null, and regression-test the composed state. The existing clear assertion at desktop/src/shared/lib/fontSizePreference.test.mjs:90-97 cannot detect this because it does not first activate a non-1 zoom factor; applying 1.5 before the clear makes the current implementation fail.

Other reviewed behavior

The accessibility and direct interaction shape is otherwise sound: the segmented control uses a named fieldset/legend, exposes selection, preserves focus-visible treatment, respects reduced motion, and restores saved state on pointer cancellation/window blur (desktop/src/shared/ui/segmented-control.tsx:81-216; workflow assertions in desktop/tests/e2e/buzz-theme-screenshots.spec.ts:738-755,1019-1140). Fresh Playwright artifacts for Default/Comfy, Larger/Compact, and Smaller/Spacious were inspected and showed legible, unclipped controls and previews. The change remains within its Desktop appearance scope and does not expand relay, tenancy, identity, native persistence, or security contracts.

Validation at matching HEAD

  • git merge-base HEAD f8692fa... → pinned base; git diff --check f8692fa...HEAD → pass; clean worktree.
  • Independent focused preference suites → 13/13 pass.
  • Fresh build:e2e + full font-size/density workflow → 1/1 pass, with three inspected screenshots.
  • just desktop-typecheck → pass.
  • just desktop-check → pass (existing Biome warnings, exit 0).
  • Adversarial full-clear probe → fail as expected for this finding: {"selected":"default","attribute":"default","typeRem":"24px"}, probe_rc=1; expected 16px.
  • Full just desktop-test was attempted but exceeded the 600-second shared-harness limit before a summary; it is neither claimed pass nor product failure.
  • Exact-head CI is green for Desktop Core, four smoke shards, two integration shards, relay E2E, macOS build, and release candidate. Those jobs do not cover the zoomed cross-window clear above.

Manual/native evidence: fresh browser workflow screenshots inspected; no native Tauri/VoiceOver run. Native AX behavior remains residual risk, but it does not weaken the deterministic blocking state-transition failure.

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
@morgmart

Copy link
Copy Markdown
Contributor

🤖 Addressed the cross-window keyboard zoom lifecycle finding in 17a440888.

useWebviewZoomShortcuts now owns synchronization for buzz:text-scale: it listens for that storage key and full-clear (key === null) events, re-reads the normalized zoom factor, updates the shortcut ref, and reapplies the composed typography without writing back during event handling.

Added a real two-page, same-origin Playwright regression that starts at Larger + 1.5×, clears storage from the peer window, verifies the primary window returns to Default at 16px, then verifies the next Cmd/Ctrl-minus starts from reset 1.0 and produces 0.9 / 14.4px. The ordinary keyboard zoom and cross-window clear workflows passed 6/6 focused runs. Pre-push desktop checks, typecheck, and 5,000+ desktop tests also passed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants