Repository navigation
fix(desktop): keep Dark mode across Bot Mode new chat - #101528
Conversation
Overall: Named-profile appearance assigns now mirror into the global slot (and a unanimous pre-existing record promotes into it), so a Bot Mode hop onto a never-themed bot inherits the look the user picked instead of resolving Correctness:
Non-blocking nit:
Verdict: LGTM. |
|
Requesting squash-merge per engineer agreement (2026-09-04): AI-review merge-ready pack; nits non-blocking; no rewrites. This PR is in the agreed pack with #101523 #101528 #101529 #101530 #101531 #101537 #101544 #101547 #101548 #101549 #101551. Out of pack (do not block this merge): #101564, #101796/#101091, #101318. |
|
Exact-head review of 7335bd7. Keep: named-profile
Check:
No competing PR from me. |
|
@kvnloo Confirmed. Last named-profile assign is the intended hop, not the first launch profile.
|
a7e731b to
ada0347
Compare
|
Awaiting maintainer. No merge from this side. HEAD is still ada0347. GitHub reports MERGEABLE with mergeStateStatus BLOCKED. There are no review threads. I inspected the Actions tab. CI, Nix flake check, and Docker on this SHA are awaiting maintainer approval. Jobs have not started (0 jobs per run). That is not a Sonar failure and not a test failure. Approving those runs needs admin on NousResearch/hermes-agent. FalconOrtiz got HTTP 403. This branch was rebased onto origin/main 8706517. Main's Enough1122's LGTM nit still stands. Promotion persists on read. Pack agreement 2026-09-04 said nits are non-blocking and no rewrites. kvnloo's last-assign question was answered earlier. Last named assign is the intended hop. The four #101216 tests remain, including that hop.
Approve the waiting workflows, then review and land if you want this in. |
|
Follow-up after rebase onto current main (
Last-assign hop is unchanged. Named The earlier note that promotion lived only on |
Named-profile appearance picks now mirror into the global fallback, and a unanimous pre-existing per-profile mode promotes into an empty global slot. Bot Mode gateway hops onto never-themed bots inherit the user's mode instead of resolving system (NousResearch#101216). Co-authored-by: Cursor <cursoragent@cursor.com>
Named-profile assign writes the global slot on every pick. After forge=dark then atlas=light, a never-themed profile inherits light. A focused test pins that hop. promoteUnanimousLegacy persists from stored. The write is idempotent and a no-op when records disagree.
ada0347 to
54913d3
Compare
Why
Bot Mode New chat with this bot activates the bot gateway profile. That profile usually has no appearance of its own. When the launch profile is not
default, Settings → Appearance Dark only wrote the per-profile record, so the hop resolvedsystemand a light OS flipped the window to Light (#101216).Scope
apps/desktop/src/themes/context.tsx—profilePref.assignmirrors named-profile picks into the global slot;promoteUnanimousLegacyfills an empty global slot when every per-profile value agrees.apps/desktop/src/themes/profile-theme.test.ts— covers inherit, override, and promote for the Desktop: Bot Mode "New chat with this bot" (roster right-click) flips Dark mode to Light — per-profile theme follows a gateway activation the user didn't ask for #101216 path.Out of scope:
$appearanceProfiledecoupling (issue suggestion 1), Theme Scope Shared (#96271), Appearance caption copy.Tradeoffs
Mirroring into the global slot means the last named-profile Appearance pick becomes the fallback for never-themed profiles. Explicit per-profile overrides still win. This is smaller than teaching ThemeProvider to ignore Bot Mode gateway activations.
Blast Radius
Desktop theme/mode persistence only. Users with one unanimous mode across profiles get that mode on never-themed bots and on cold launch after a bot hop. Installs with conflicting per-profile modes keep those overrides and do not auto-promote.
Verification
20 passed, exit 0.