Skip to content

fix(settings): keep Appearance responsive during font discovery #126

Open

Description

@PsychedelicShayna

Note

GPT-6 Astra on behalf of PsychedelicShayna

Observed behavior

The owner reports Appearance freezing the entire interface for 6–12 seconds, sometimes longer, while navigating away is fast. This is distinct from the completed Providers catalog virtualization in #67/#99/#101. The report is accepted; no confirmation rerun is required.

At nightly 3c5789f, FontFamilyPicker.tsx:142-145 synchronously filters all installed fonts through isMonospaceFamily during render, even for closed pickers. Its permission probe can start discovery automatically on mount. Each monospace classification measures multiple strings/styles on canvas.

Acceptance

  • Closed font controls perform no full-catalog synchronous monospace scan during Appearance mount.
  • Opening font selection remains responsive; cancellation and repeated mount/open do not repeat unnecessary work.
  • Saved choices, reset, typography editing and actual font previews continue working.
  • Focused behavior checks and private real-client first-open/reopen/picker measurements are recorded.

NeoPi theme parity and the broader restyle are separate work, not prerequisites for this repair. Claimed by Mercury/AppearanceRepair.

Owner's words (verbatim)

2026-10-22 owner dictation — contiguous excerpt

Oh, appearance. By the way, is the one section that also gets really, really laggy. Whenever you click on appearance, it lags for like over, yeah, that took like six or seven seconds. And sometimes it doesn't stop, like it really is horrible. I have panel animations down to zero milliseconds. I'm gonna reset it. Oh, it's already at zero, okay. Well, I'm gonna set it to 150 to see if chat width wide, maybe. By the way, appearance should list the themes that the terminal user interface has, not whatever the fuck this is. Key bindings, again, should also be based around terminal user interface, but I-I won't blame you for that. General has workspace rules, yes, that makes sense. yeah, search on origin, this all, yeah, this is all fine. In legacy features, having plan mode in there and context window indicator, I hate that. Like, I like having information about what the fuck's happening. I like the new sidebar, I don't like the legacy sidebar, I think it sucks. So I think it's good there, but Jesus, I just clicked appearance again. And it appears like it it just freezes the whole fucking thing. That's so shit. Alright, now I've clicked on it, now I'm gonna click away. It's so dumb. And it just takes an instant to click away.

Complete unedited message: #125 . The owner's words take precedence over this summary.

Activity

  1. added
    bugSomething isn't working
    priority: p1High value or prerequisite for several issues
    agent: startedAn agent has claimed this; do not duplicate the work
    on Oct 22, 2026
  2. PsychedelicShayna commented on Oct 22, 2026

    @PsychedelicShayna
    OwnerAuthor

    Note

    GPT-6 Astra on behalf of PsychedelicShayna

    Installed nightly source 3ca07c37659338f9fde4142baf50d20f09e4c5d8, version 0.0.42-nightly.20261022.39742893669.1. The NeoCode launcher now selects this versioned AppRun; the previous artifact and launcher backup remain available. AppImage SHA256: bde7d6dce6a2928cedf8104ffcf912d8dafb75d59b65f79a052aa65b671bc113.

    Proof used the actual installed Electron artifact, normal shell hydration and private state on Xvfb :10. The owner's live window, database and wallet were not used or restarted.

    PR #131 is delivered. Same installed-font catalog in both measurements: 554 families, 2,817 faces.

    Appearance navigation Before, 3c5789f Installed, 3ca07c3
    Longest renderer task 7,807 ms 156 ms

    This is one measured before/after case, not a general benchmark. The after-proof also typed into the opened monospace picker, closed it during classification, navigated away and back with no long tasks in that interaction window, completed classification, selected DejaVu Sans Mono, retained it across navigation, and restored the default Liberation Mono.

    Three focused scheduler tests, web types, targeted lint and formatting passed. The initial bootstrap-root Vite runner failed before collecting tests; the corrected worktree-local runner passed.

    Before image · After image · Interaction recording · Before profile · After profile · Installed receipt.

    Exact tested Linux AppImage. Marking agent work finished; this issue remains open until promotion to main.

  3. added
    agent: finishedThe agent's part is done; not necessarily mergeable
    and removed
    agent: startedAn agent has claimed this; do not duplicate the work
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent: finishedThe agent's part is done; not necessarily mergeablebugSomething isn't workingpriority: p1High value or prerequisite for several issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions