Skip to content

cmux-next: bounce the Dock icon when an alert arrives in the background - #21735

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
feat/next-dock-bounce
Oct 18, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
feat/next-dock-bounce

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

When an agent needs you while you're in another app, cmux only posts a banner, which is easy to miss. Settings > Notifications now has Bounce Dock Icon (notifications.dockBounce), with three choices: Off, Once (default) and Until You Switch to cmux.

The bounce follows the same rule as the banner and the phone push: a notification that would alert on this Mac, arriving while cmux isn't the active app, bounces the Dock icon. Muted workspaces, quiet hours and banners set to Never don't bounce, and showcase captures post nothing.

  • NotificationPolicy.decide sets Decision.bounce alongside the rest of the arrival decision, so it's covered by a table test. NotificationCenterService only calls requestUserAttention: .informationalRequest for Once, .criticalRequest for Until You Switch to cmux.
  • To keep CmuxNextApp from growing, the pure NotificationPolicy (and NotificationTrigger) move beside the preferences they read, in CmuxNextSettings, as a struct over the preferences (decide, clears). No behavior change; CmuxNextApp source is 62 lines under the base.
  • macOS Focus: the bounce does not read Focus or Do Not Disturb state. A Focus that hides cmux banners still lets the Dock icon bounce; quiet hours and muted workspaces do stop it.
  • Agents can't set the key (userOnly).
  • The strings are translated into all 21 locales in the settings catalog.

This is the second of the session-settings PRs, after #21730. The two are independent.

Testing

  • After review: merged feat-cmux-next, moved NotificationPolicy out of the App, added a quiet-hours case (fd6bfda, exports at c99d0c8). At c99d0c8 these passed on the fleet: DockBouncePolicyTests (8), SettingsSchemaExportTests, ManagedPreferencesManifestTests, FinishedBannerBurstTests, ApprovalBannerTests, ProgramAlertTitleTests, NotificationPreviewTests.

  • The fleet export step at fede4fa built the package and its tests and regenerated the settings schema, MDM docs and stamp; the regenerated files are committed here.

  • package-test-lane.sh suite at 8ff936b passed: DockBouncePolicyTests (7), SettingsSchemaExportTests, ManagedPreferencesManifestTests, FinishedBannerBurstTests and ApprovalBannerTests.

  • Local checks: check-no-godfiles.sh --base, localization_catalog.py check (no findings in this catalog), and defaults_guard.py snapshot/check-fresh. check-concurrency.sh and the namespace lint report only base files (TextWeightProbe, existing singletons).

  • Not run: the webviews bun test, and no tagged build, so I haven't watched the bounce itself live.

  • Default: notifications.dockBounce = once, approved by the coordinator under Leo's rule for settings defaults ("you pick, we toggle"); it stays a user toggle.

Changelog

Added: The Dock icon bounces when an alert arrives while cmux is in the background (once by default, or until you switch back, or off).

Proof

Settings row and a Dock bounce. No recording yet: there's no tagged build from this Linux box.

🤖 Generated with Claude Code

teamleaderleo and others added 3 commits October 18, 2026 15:15
…nactive

New Settings > Notifications row, "Bounce Dock Icon": Off, Once (default) or
Until You Switch to cmux (notifications.dockBounce). A notification that
alerts on this Mac (the same rule as the banner and the phone push) while
cmux is not the active app bounces the Dock icon. Muted workspaces, quiet
hours and banners turned off do not bounce; showcase captures post nothing.

- NotificationPolicy decides the bounce with the rest of an arrival, so it is
  a table test; NotificationCenterService only calls requestUserAttention.
- Agents may not set the key (userOnly).
- Strings in all 21 locales of the settings catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….dockBounce

Exports from the fleet export step at fede4fa; defaults snapshot from
defaults_guard.py snapshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 18, 2026 15:24 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: a064baaf-1877-4898-ab4c-3f6484f6f38c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Receipt for 3508036 (this PR's head; a new push replaces it)

  • Visual review: HQ feed card · gallery before/after runs
  • Checks: this head
  • App of this head (app.zip, kept 1 day): gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr21735 -f ref=feat/next-dock-bounce -f platform=macos -f backend_mode=local

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

red: web / Web status; do not merge until green; see lane-rules
red: web / react-apps-check; do not merge until green; see lane-rules
red: web / react-apps-check (1); do not merge until green; see lane-rules

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Unclear: web / react-apps-check (1) failed: no known signature; failed step: Test webviews.

CI failed on 3508036636 (run 39171863558 attempt 1): 2 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (1) unknown no known signature; failed step: Test webviews
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on 3508036636 (https://github.com/manaflow-ai/cmux/actions/runs/39171863558). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-rylw8 created for this PR by the cmux coordinator.

@blacksmith-sh

blacksmith-sh Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Found 4 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpd0p2xw0e/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpzv3bfg50/summary-fail.json (live):/summary-fail.json (live): View Logs
test/narrow-layouts.test.ts/narrow-layouts.test View Logs
test/narrow-layouts.test.ts/narrow-layouts.test View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

teamleaderleo and others added 2 commits October 18, 2026 21:21
Review of #21735: CmuxNextApp only shrinks (check-app-size.sh). The pure
notification rules (NotificationPolicy, NotificationTrigger) move beside the
preferences they read in CmuxNextSettings, as a struct over the preferences
(decide, clears). The App's source is 62 lines under the base. No behavior
change; a quiet-hours case joins the Dock bounce tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 18, 2026 21:26 — with GitHub Actions Inactive
Exports from the fleet export step at fd6bfda.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 18, 2026 21:31 — with GitHub Actions Inactive
…ock-bounce

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Localizable.xcstrings
#	Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift
#	schemas/settings-export/settings-schema.sources.sha256
#	schemas/settings/settings-schema.json
@cursor

cursor Bot commented Oct 18, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

Exports from the fleet export step at 63903ee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 18, 2026 22:21 — with GitHub Actions Inactive
@teamleaderleo
teamleaderleo merged commit f37ec8b into feat-cmux-next Oct 18, 2026
198 of 222 checks passed
@teamleaderleo
teamleaderleo deleted the feat/next-dock-bounce branch October 18, 2026 23:04
@github-actions

Copy link
Copy Markdown
Contributor

cmux-next tour of 3508036636aa17615dd1ecd1de5cfe3f561f1a5c (run)

The tour job failed before the tour ran (build or setup); the run log has the output.

The tour produced no media.

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

teamleaderleo added a commit that referenced this pull request Oct 18, 2026
…ef pet test

feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 19, 2026
* cmux-next: a Dock bounce stops once its alert is read elsewhere; no bounce without a banner

Follow-ups from the #21735 review:

- Until You Switch to cmux bounced on after the notification was read on the
  phone, from the CLI or by Mark All Read, since nothing cancelled the
  request. DockAttention (CmuxNextSettings) keeps the running request and
  cancels it when the unread count reaches zero.
- `notify --desktop false` asks for no banner, so it gets no bounce either:
  the bounce follows the banner decision, not the alert decision.

CmuxNextApp source shrinks by 2 lines (the bounce helper moved out).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: settings export stamp for the dock bounce follow-ups

Generated only: fleet export step at 644b20c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: DockAttention lives in CmuxNextDesign; the App maps the setting

Review of #21883: a settings module should not call app-wide AppKit.
DockAttention moves to CmuxNextDesign with a bounce(untilActive:) API;
NotificationCenterService maps notifications.dockBounce to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: settings export stamp after moving DockAttention

Generated only: fleet export step at 05a097d.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 20, 2026
…s (whole stack) (#21738)

* feat(next): float the Chief pet over every app

A small Chief character in a non-activating panel that joins every Space,
never takes focus, drags anywhere (its spot is kept per display and pulled
back on screen), and opens the Chief on a click. Behind the chiefPet.enabled
Debug Settings toggle, off by default, until it has a user setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(next): move the Chief pet into CmuxNextFloating

CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new
CmuxNextFloating target with the floating chat's per-display frames, which it
already shares; the App keeps only the wiring and shrinks by 23 source lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 1810bb6

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099

* fix(next): resolve the Chief pet's switch inside its module

A public default argument may only use what the file imports publicly; the
controller now takes an optional switch and reads the tunable itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): float the full-body Chief, not Home's round avatar

The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's
references float the full-body Chief the Chief Dock uses. CmuxNextFloating now
bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's
default image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Revert "fix(next): float the full-body Chief, not Home's round avatar"

This reverts commit 2eed332.

* feat(next): the Chief pet is a pixel mascot over a glass rail

Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default,
all nine bundled, scaled up with whole pixels) over a glass rail with a
compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click
on the character or compose opens the Chief.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): give the Chief pet's rail the dock's expand chevron

The rail matches chief-water-reference's capsule: compose and the chevron
(the dock's disclosure mark pointing up). The character's box is 88 x 80 pt
so the pixel mascot carries the reference pet's weight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): show agent notices over the Chief pet as a glass deck

What alerts on this Mac (a banner's rules) also shows over the pet, matching
chief-chat-source-captures d154d558: glass capsules of the references' size
(330 x 56 pt) with a bold title and one muted line and no status glyph, the
older ones peeking out below as a deck; the rail's chevron unfolds them into
a column and each capsule opens its tab. One notice per tab; identical
content never re-animates; a finished turn leaves after 8 s while a question
or failure stays, counted on the character's badge, until its tab is read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): reply to a session or the Chief from the Chief pet

A click on the pet or the rail's compose opens a reply capsule just over the
pet, the notices' size and glass, that takes the keys without activating
cmux. It starts on the newest notice: Return types the reply into that
terminal (as a notify --reply banner does) or, for an agent chat, opens the
chat in the floating chat or its tab; with no notice it messages the Chief.
Cmd-Return opens the target. The Quick Agent Chat's panel moves into
CmuxNextFloating with the rest of the floating surfaces, so the App keeps
shrinking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): turn the Chief pet on and off and pick its character in Settings

home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief
Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet,
the palette's settings rows and cmux settings set replace the Debug Settings
toggle; agents may set both (looks only). The pet follows them live.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet review fixes

- Replies type into a terminal only while the notice is still its tab's
  unread notification, as a notify --reply banner's do.
- A notice read anywhere else (another client, a closed tab) leaves the pet.
- The reply menu keeps two notices with one title apart, keeps the chosen
  session across refreshes and falls back to the Chief, never to another
  session; Cmd-Return opens, other command keys stop at the box.
- Notice capsules take their press, so a click opens the tab; an agent
  chat opens its tab rather than a second copy in the floating chat.
- A finished turn dropped behind three waiting notices shows nothing.
- CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the
  notification); the pet is made by the notification service, so
  AppServices and AppDelegate stay unchanged; the mascot constant is
  initial (lint); the Chief Pet settings get a card under Agents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet labels truncate without reaching into the cell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing

- home.chiefPetEnabled is user-only: the pet puts agent output over every app
  and a reply box that types into terminals. The character stays agent-settable.
- A pet reply types only while a program still runs in the terminal's
  foreground: process-info and the paste go over one connection, back to
  back, and a bare shell refuses the reply.
- The pet, its notices and the reply box stay out of screen shares.
- The notice deck takes its size with no screen, and the deck height test
  compares CGFloats.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports and Settings page strings for the Chief pet

Generated only. Settings exports from the fleet export-settings step at
2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its
BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot,
Settings page strings from webviews/scripts/pages/gen-strings.mjs settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test

feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at 492302f
(cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and
Settings page strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at b6e4dd2
(key chiefpet-export-settings-b6e4dd2); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 5a7210a

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39189337102

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at 5bedbf4
(key chiefpet-export-settings-5bedbf4); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at c1475df
(key chiefpet-export-settings-c1475df); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate the settings export stamp for the Chief pet after the base merge

Generated only, from the fleet export-settings step at bb6706c
(key chiefpet-export-settings-bb6706c); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session

Off, the pet builds no notice. A typed reply goes into a terminal only for an
agent's notice or one posted with notify --reply, as a banner does; any other
terminal notice opens its tab. When the chosen session's notice leaves, the box
drops its text instead of sending it to the Chief.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Home opens Keyboard Shortcuts settings off the main thread

The crash-class concurrency gate counts every finding in this PR because it
touches Package.swift; HomeHostView called NSWorkspace.shared.open on the main
thread (cx-050n). Use openInBackground like the other call sites.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports after the base merge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 53ddc28

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39313213321

* chore(next): drop the case-insensitive app/ read from the target graph (Linux autofix's output)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet bubble and reply field use the type scale

Same 15pt title size and semibold weight, now from TypeScale, so the
Type scale check no longer flags the pet's files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 489afb2

- regenerated schemas/settings-export/settings-schema.sources.sha256
- regenerated schemas/settings/settings-schema.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39341154309

* chore(next): PR autofix at ea05044

- regenerated docs/mdm/com.manaflow.cmux.json
- regenerated docs/mdm/com.manaflow.cmux.plist
- regenerated docs/mdm/managed-preferences.md
- regenerated schemas/settings-export/settings-schema.sources.sha256
- regenerated schemas/settings/settings-schema.json
- regenerated schemas/defaults/cmux-next.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39346363063

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
teamleaderleo added a commit that referenced this pull request Oct 20, 2026
… the foreground (#22044)

* feat(next): float the Chief pet over every app

A small Chief character in a non-activating panel that joins every Space,
never takes focus, drags anywhere (its spot is kept per display and pulled
back on screen), and opens the Chief on a click. Behind the chiefPet.enabled
Debug Settings toggle, off by default, until it has a user setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(next): move the Chief pet into CmuxNextFloating

CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new
CmuxNextFloating target with the floating chat's per-display frames, which it
already shares; the App keeps only the wiring and shrinks by 23 source lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 1810bb6

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099

* fix(next): resolve the Chief pet's switch inside its module

A public default argument may only use what the file imports publicly; the
controller now takes an optional switch and reads the tunable itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): float the full-body Chief, not Home's round avatar

The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's
references float the full-body Chief the Chief Dock uses. CmuxNextFloating now
bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's
default image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Revert "fix(next): float the full-body Chief, not Home's round avatar"

This reverts commit 2eed332.

* feat(next): the Chief pet is a pixel mascot over a glass rail

Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default,
all nine bundled, scaled up with whole pixels) over a glass rail with a
compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click
on the character or compose opens the Chief.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): give the Chief pet's rail the dock's expand chevron

The rail matches chief-water-reference's capsule: compose and the chevron
(the dock's disclosure mark pointing up). The character's box is 88 x 80 pt
so the pixel mascot carries the reference pet's weight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): show agent notices over the Chief pet as a glass deck

What alerts on this Mac (a banner's rules) also shows over the pet, matching
chief-chat-source-captures d154d558: glass capsules of the references' size
(330 x 56 pt) with a bold title and one muted line and no status glyph, the
older ones peeking out below as a deck; the rail's chevron unfolds them into
a column and each capsule opens its tab. One notice per tab; identical
content never re-animates; a finished turn leaves after 8 s while a question
or failure stays, counted on the character's badge, until its tab is read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): reply to a session or the Chief from the Chief pet

A click on the pet or the rail's compose opens a reply capsule just over the
pet, the notices' size and glass, that takes the keys without activating
cmux. It starts on the newest notice: Return types the reply into that
terminal (as a notify --reply banner does) or, for an agent chat, opens the
chat in the floating chat or its tab; with no notice it messages the Chief.
Cmd-Return opens the target. The Quick Agent Chat's panel moves into
CmuxNextFloating with the rest of the floating surfaces, so the App keeps
shrinking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): turn the Chief pet on and off and pick its character in Settings

home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief
Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet,
the palette's settings rows and cmux settings set replace the Debug Settings
toggle; agents may set both (looks only). The pet follows them live.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet review fixes

- Replies type into a terminal only while the notice is still its tab's
  unread notification, as a notify --reply banner's do.
- A notice read anywhere else (another client, a closed tab) leaves the pet.
- The reply menu keeps two notices with one title apart, keeps the chosen
  session across refreshes and falls back to the Chief, never to another
  session; Cmd-Return opens, other command keys stop at the box.
- Notice capsules take their press, so a click opens the tab; an agent
  chat opens its tab rather than a second copy in the floating chat.
- A finished turn dropped behind three waiting notices shows nothing.
- CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the
  notification); the pet is made by the notification service, so
  AppServices and AppDelegate stay unchanged; the mascot constant is
  initial (lint); the Chief Pet settings get a card under Agents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet labels truncate without reaching into the cell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing

- home.chiefPetEnabled is user-only: the pet puts agent output over every app
  and a reply box that types into terminals. The character stays agent-settable.
- A pet reply types only while a program still runs in the terminal's
  foreground: process-info and the paste go over one connection, back to
  back, and a bare shell refuses the reply.
- The pet, its notices and the reply box stay out of screen shares.
- The notice deck takes its size with no screen, and the deck height test
  compares CGFloats.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports and Settings page strings for the Chief pet

Generated only. Settings exports from the fleet export-settings step at
2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its
BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot,
Settings page strings from webviews/scripts/pages/gen-strings.mjs settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test

feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at 492302f
(cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and
Settings page strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-tui): a reply for an exited program must not reach the shell

send with expect_foreground is ignored today, so a Chief pet reply typed
after its agent exited runs as a shell command. This test is red until the
daemon checks the foreground in the send.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-tui): keep the send guard test out of cli.rs, rustfmt it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at b6e4dd2
(key chiefpet-export-settings-b6e4dd2); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 5a7210a

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39189337102

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at 5bedbf4
(key chiefpet-export-settings-5bedbf4); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at c1475df
(key chiefpet-export-settings-c1475df); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-tui, cmux NEXT: the daemon refuses a pet reply once its program left the foreground

send takes expect_foreground (send-expect-foreground-v1): the daemon reads the
terminal's foreground executable right before the write and fails the request,
writing nothing, when it is no longer the one named. The Chief pet's quick
reply names the executable its process-info check saw on both the paste and
the Return, so an agent that exits between the check and the paste no longer
gets its reply run as a shell command. An older daemon ignores the field and
the App-side check still applies.

The terminal_id guard test now uses the host terminal id, so it fails on the
guard and not on an unknown id.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-tui: send params move into their own struct; the SDK sets expect_foreground

server.rs is at its god-file baseline, so send's params live in
cmd_terminal_io::SendParams. The Rust SDK's send helpers leave the new
field missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate the settings export stamp for the Chief pet after the base merge

Generated only, from the fleet export-settings step at bb6706c
(key chiefpet-export-settings-bb6706c); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-tui: drop the redundant SendParams path in the scheduler test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): the Chief pet types only into agents' and asked-for replies; typed text leaves with its session

Off, the pet builds no notice. A typed reply goes into a terminal only for an
agent's notice or one posted with notify --reply, as a banner does; any other
terminal notice opens its tab. When the chosen session's notice leaves, the box
drops its text instead of sending it to the Chief.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Home opens Keyboard Shortcuts settings off the main thread

The crash-class concurrency gate counts every finding in this PR because it
touches Package.swift; HomeHostView called NSWorkspace.shared.open on the main
thread (cx-050n). Use openInBackground like the other call sites.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports after the base merge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(tui): drop a stray clippy allow left above the send capability const

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 53ddc28

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39313213321

* chore(next): drop the case-insensitive app/ read from the target graph (Linux autofix's output)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet bubble and reply field use the type scale

Same 15pt title size and semibold weight, now from TypeScale, so the
Type scale check no longer flags the pet's files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-tui): a guarded send with no readable foreground writes nothing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next, cmux-tui): review nits on the pet reply guard

- The app lists send-expect-foreground-v1 as an optional capability and
  notes an unguarded reply when an older daemon lacks it.
- expect_foreground with terminal_id is refused as not delivered, like
  the other send refusals.
- The spec says the check is best effort, with a residual window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the guarded pet reply lives on DaemonConnection; the phone lane knows expect_foreground

typeToForegroundProgram does the foreground check and the two guarded
writes in CmuxNextDaemon, so the App target shrinks. The regenerated
phone-lane field list allows expect_foreground on send: the phone lane
already has send and process-info, and the field can only refuse a write.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…cx-ghagp)

CmuxNextApp may not grow (check-app-size.sh, code-quality.md SW14).
BackgroundActivation (accessory policy and the menu bar item) moves to
CmuxNextSettings, as #21735 did for NotificationPolicy. The App keeps only the
wiring: AppServices builds it with the menu bar icon and the "may enter" rule
(the process's own services, no window open, not quitting, the setting on), and
WindowManager calls it before a window is ordered in and whenever its
controllers change (didSet, so every removal path counts, not only the close
path). The old `!isTerminating` check is dropped: prepareForTermination runs only
inside a quit, while isQuitting is already true.

To pay for the wiring, two four-line registry.apply blocks in WindowManager use
the one-line form the file already uses elsewhere (no behavior change).
CmuxNextApp source lines: no growth against base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…ghagp) (#20479)

* test(cmux-next): background mode is a menu bar app, a window opening comes back regular (cx-ghagp, red)

Closing the last window must drop to the accessory activation policy (no Dock
icon, not in Cmd-Tab); Show cmux and Settings must make the app regular before
the window is ordered in. Fails on base: the policy stays regular.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(cmux-next): background mode is a menu bar app with no Dock icon until a window opens (cx-ghagp)

With no cmux window open the app keeps running (terminals and agents live in
their daemons). It now drops to the accessory activation policy: no Dock icon,
not in Cmd-Tab, and a menu bar item (Show cmux, New Window, Settings, Quit)
takes the Dock icon's place. Any shell window opening makes the app regular
again before the window is ordered in, then activates it (unless it opens
behind, or under no-activate). Panels (About, Start Agent, sign-in) show
without leaving the mode.

app.hideDockIconWithoutWindows (Settings > General, on by default) set to
false keeps the old behavior. Only the process's adopted services drive the
policy, so services a test builds leave the test process alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-next): background mode review fixes (cx-ghagp)

- A Finder or Spotlight reopen in background mode always brings a window
  back, even when a panel or the menu bar item counts as visible.
- No activation for windows that are never ordered in (tests).
- BackgroundActivation holds its manager weakly (crash ratchet: no unowned).
- The test loads a real cmux.json, so Settings opens, and checks that
  app.hideDockIconWithoutWindows false keeps the app regular.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(cmux-next): regenerate settings exports for app.hideDockIconWithoutWindows (cx-ghagp)

Settings schema export, MDM manifests (fleet export-settings step), the
defaults snapshot and the settings page strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at ffe8040

- regenerated schemas/defaults/cmux-next.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38527949005

* chore(cmux-next): settings exports = base's plus app.hideDockIconWithoutWindows (cx-ghagp)

The base merge dropped base's ui.paneAnimations rows from the exports. Rebuilt
each export as a three-way merge of base's file and this branch's export
commit, with the schema hash recomputed over the merged rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(cmux-next): defaults snapshot from the merged settings schema (cx-ghagp)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(cmux-next): settings exports on the merged base plus app.hideDockIconWithoutWindows (cx-ghagp)

The textual base merge dropped base's new settings rows from the exports;
rebuilt as a three-way merge with the schema hash recomputed, then the
defaults snapshot and page strings regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 84f9be2

- regenerated cmux-tui/crates/cmux-app-host/generated/cmux-app.d.ts
- vp fmt webviews/src/pages/home-channels/ConversationList.tsx
- vp fmt webviews/src/pages/home-channels/HomeChannelsPage.tsx
- vp fmt webviews/src/pages/home-channels/ThreadSheet.tsx
- vp fmt webviews/src/pages/home-channels/daemonHome.ts
- vp fmt webviews/src/pages/home-channels/model.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38533832455

* chore(next): PR autofix at b621efd

- regenerated schemas/defaults/cmux-next.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38552143920

* chore(cmux-next): settings exports regenerated on the merged head (cx-ghagp)

The textual base merge dropped base's freeModel.enabled row from the
exports. Re-exported on the fleet at b621efd (schema hash from the
export), then the defaults snapshot and page strings regenerated. Against
base every file now only adds app.hideDockIconWithoutWindows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 022e73f

- regenerated webviews/src/pages/settings/generated/strings.json
- regenerated schemas/defaults/cmux-next.json
- vp fmt webviews/src/pages/home-channels/cloudHome.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38649068647

* chore(cmux-next): settings exports regenerated on the merged head (cx-ghagp)

The base merge kept this branch's older exports, which dropped base's
sidebar density, free model group and notification default rows. These come
from the fleet export-settings step on 022e73f and gen-strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(cmux-next): settings strings = base's plus the two hideDockIconWithoutWindows entries (cx-ghagp)

The second base merge kept base's moved keys in a different order; respliced
onto base's file so the diff is only this PR's two strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(cmux-next): background mode logic moves out of CmuxNextApp (cx-ghagp)

CmuxNextApp may not grow (check-app-size.sh, code-quality.md SW14).
BackgroundActivation (accessory policy and the menu bar item) moves to
CmuxNextSettings, as #21735 did for NotificationPolicy. The App keeps only the
wiring: AppServices builds it with the menu bar icon and the "may enter" rule
(the process's own services, no window open, not quitting, the setting on), and
WindowManager calls it before a window is ordered in and whenever its
controllers change (didSet, so every removal path counts, not only the close
path). The old `!isTerminating` check is dropped: prepareForTermination runs only
inside a quit, while isQuitting is already true.

To pay for the wiring, two four-line registry.apply blocks in WindowManager use
the one-line form the file already uses elsewhere (no behavior change).
CmuxNextApp source lines: no growth against base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): background mode's entry check holds AppServices weakly

unowned is on the crash ratchet's banned list; a weak capture that answers
false once AppServices is gone. AppServices imports CmuxNextIcons for the
menu bar icon it names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
teamleaderleo added a commit that referenced this pull request Oct 21, 2026
…& Pets (#21822)

* feat(next): float the Chief pet over every app

A small Chief character in a non-activating panel that joins every Space,
never takes focus, drags anywhere (its spot is kept per display and pulled
back on screen), and opens the Chief on a click. Behind the chiefPet.enabled
Debug Settings toggle, off by default, until it has a user setting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(next): move the Chief pet into CmuxNextFloating

CmuxNextApp may not grow (code-quality SW14), so the pet lives in a new
CmuxNextFloating target with the floating chat's per-display frames, which it
already shares; the App keeps only the wiring and shrinks by 23 source lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 1810bb6

- regenerated Packages/macOS/CmuxNext/ci-target-graph.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39137151099

* fix(next): resolve the Chief pet's switch inside its module

A public default argument may only use what the file imports publicly; the
controller now takes an optional switch and reads the tunable itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): float the full-body Chief, not Home's round avatar

The App's ChiefAvatar.png is the round cat Home draws in a disc; Leo's
references float the full-body Chief the Chief Dock uses. CmuxNextFloating now
bundles that character (ChiefPet.png, the dock's ChiefAvatar.png) as the pet's
default image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Revert "fix(next): float the full-body Chief, not Home's round avatar"

This reverts commit 2eed332.

* feat(next): the Chief pet is a pixel mascot over a glass rail

Match chief-water-reference: the Chief Dock's pixel mascot (Orb by default,
all nine bundled, scaled up with whole pixels) over a glass rail with a
compose tool, 8 pt apart. A drag anywhere but a tool moves the pet; a click
on the character or compose opens the Chief.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): give the Chief pet's rail the dock's expand chevron

The rail matches chief-water-reference's capsule: compose and the chevron
(the dock's disclosure mark pointing up). The character's box is 88 x 80 pt
so the pixel mascot carries the reference pet's weight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): show agent notices over the Chief pet as a glass deck

What alerts on this Mac (a banner's rules) also shows over the pet, matching
chief-chat-source-captures d154d558: glass capsules of the references' size
(330 x 56 pt) with a bold title and one muted line and no status glyph, the
older ones peeking out below as a deck; the rail's chevron unfolds them into
a column and each capsule opens its tab. One notice per tab; identical
content never re-animates; a finished turn leaves after 8 s while a question
or failure stays, counted on the character's badge, until its tab is read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): reply to a session or the Chief from the Chief pet

A click on the pet or the rail's compose opens a reply capsule just over the
pet, the notices' size and glass, that takes the keys without activating
cmux. It starts on the newest notice: Return types the reply into that
terminal (as a notify --reply banner does) or, for an agent chat, opens the
chat in the floating chat or its tab; with no notice it messages the Chief.
Cmd-Return opens the target. The Quick Agent Chat's panel moves into
CmuxNextFloating with the rest of the floating surfaces, so the App keeps
shrinking.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): turn the Chief pet on and off and pick its character in Settings

home.chiefPetEnabled (off by default) and home.chiefPetMascot (the Chief
Dock's nine pixel mascots, Orb by default) in Settings > Home > Chief Pet,
the palette's settings rows and cmux settings set replace the Debug Settings
toggle; agents may set both (looks only). The pet follows them live.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet review fixes

- Replies type into a terminal only while the notice is still its tab's
  unread notification, as a notify --reply banner's do.
- A notice read anywhere else (another client, a closed tab) leaves the pet.
- The reply menu keeps two notices with one title apart, keeps the chosen
  session across refreshes and falls back to the Chief, never to another
  session; Cmd-Return opens, other command keys stop at the box.
- Notice capsules take their press, so a click opens the tab; an agent
  chat opens its tab rather than a second copy in the floating chat.
- A finished turn dropped behind three waiting notices shows nothing.
- CmuxNextFloating no longer imports CmuxNextDaemon (the App maps the
  notification); the pet is made by the notification service, so
  AppServices and AppDelegate stay unchanged; the mascot constant is
  initial (lint); the Chief Pet settings get a card under Agents.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet labels truncate without reaching into the cell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief pet safety: user-only switch, agent-still-running replies, no screen sharing

- home.chiefPetEnabled is user-only: the pet puts agent output over every app
  and a reply box that types into terminals. The character stays agent-settable.
- A pet reply types only while a program still runs in the terminal's
  foreground: process-info and the paste go over one connection, back to
  back, and a bare shell refuses the reply.
- The pet, its notices and the reply box stay out of screen shares.
- The notice deck takes its size with no screen, and the deck height test
  compares CGFloats.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports and Settings page strings for the Chief pet

Generated only. Settings exports from the fleet export-settings step at
2f2f1e6 (cmux-ci step 20d9ccba77afe7b51e35de31, decoded from its
BEGIN_ARTIFACT blocks), defaults snapshot from defaults_guard.py snapshot,
Settings page strings from webviews/scripts/pages/gen-strings.mjs settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): import NotificationPolicy from CmuxNextSettings in the Chief pet test

feat-cmux-next moved NotificationPolicy into CmuxNextSettings (#21735).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief pet after the base merge

Generated only, from the fleet export-settings step at 492302f
(cmux-ci step on key chiefpet-export-settings-492302f); defaults snapshot and
Settings page strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(next): a Chief Pet settings page, after ChatGPT's Mini & Pets

Settings gets a Chief Pet category whose card previews the pet over its
rail with Show Pet / Hide Pet, then lists every character (the Chief Dock's
pixel mascots) as a card with its name and a line about it, plus None,
which hides the pet. The card draws home.chiefPetEnabled and
home.chiefPetMascot in place of their rows; search, the palette and
cmux settings still reach them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(next): Chief Pet settings page: kebab-case category id, row keys, tighter preview

The category is chief-pet (gallery variants and routes are lower kebab
case). The card's header and grid carry their rows' keys, so search and the
gallery's control probe land on them. The preview is 160 pt tall, nearer
ChatGPT's Mini & Pets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): regenerate settings exports for the Chief Pet page

Generated only, from the fleet export-settings step at ff4bf11 (key
chiefpet-export-settings-ff4bf11); defaults snapshot and Settings page
strings checked fresh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chief Pet: list its card in the settings gallery and export its category

The settings gallery covers ChiefPetCard (gallery-coverage), and the settings
schema export carries the Chief Pet category the layout adds (pawprint, the
pet's group moved out of Agents). The export stamp is left for the base
autofix: feat-cmux-next's stamp is already stale against its own sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Chief Pet card: respect managed and disconnected keys, keep the pet on a refused pick

The card replaces the two plain rows, so it now does what SettingRow does: its
buttons are disabled while disconnected or when a key is managed, and it shows
the managed reason and any refused write under the header and the grid.
Picking a character turns the pet on only when the character write succeeded.
The "no plain rows" test checked a data-key attribute nothing emits; it now
looks for a .row with the key, and fails if SectionView stops filtering them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at c27187b

- docs/mdm/com.manaflow.cmux.json
- docs/mdm/com.manaflow.cmux.plist
- docs/mdm/managed-preferences.md
- schemas/defaults/cmux-next.json
- schemas/settings-export/settings-schema.sources.sha256
- schemas/settings/settings-schema.json

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39380724189

* chore(next): PR autofix at b896c85

- schemas/settings-export/settings-schema.sources.sha256

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39391206920

* Settings: the Chief Pet mascots ship inlined in the page

The shipped Settings page is one self-contained index.html whose CSP allows
img-src data: only, so new URL(..., import.meta.url) art never loaded. Import
the PNGs and let the pages bundler inline them as data URLs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray

* Settings Chief Pet: search lands on the card; a managed toggle leaves the characters pickable

- The card takes the route's focus: a search result for the toggle or the
  character focuses Show/Hide or the selected choice.
- With home.chiefPetEnabled managed on, the characters stay pickable when the
  mascot is editable; only a pick that must also show the pet needs the toggle.
- Catalogs and the schema export go back to base plus this PR's keys: the stale
  export dropped base rows (screenshots.*). The PR autofix regenerates the
  export with the Chief Pet category.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray

* Settings Chief Pet: a search result focuses its control once, after the values arrive

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray

* chore(next): PR autofix (settings exports with the Chief Pet category)

Applied from run 39517779622's pr-autofix-patch with pr-autofix-apply.sh --changed.

Autofix-Run: 39517779622
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray

* cmux NEXT Settings > Chief Pet: hovering a character previews it; the chosen one is checked

As ChatGPT's picker: the preview over the rail shows the character under the pointer or
keyboard focus until it leaves, without writing anything, and the chosen card carries a check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT Settings > Chief Pet: test that hovering a character previews it without picking it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT Settings > Chief Pet: a later click wins over a pick's late write; no stuck preview

Review of #21822:
- Picking a character while the pet is hidden turns it on only if no later click (None,
  Hide Pet, another pick) came while the character write was out.
- A locked grid previews nothing: a disabled card may never get its mouseleave or blur.
- The hover test builds its events with window.MouseEvent (Bun has no MouseEvent global).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): settings exports for the Chief Pet page (fleet export step a6c252508e25157dd685f2ee)

Regenerated by run-swift-testing-suites.sh export-settings on the fleet at
98b5e74 plus #22821's one-line base compile fix (palette code; it does not
reach the settings exports).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bab-4f26-7f80-bf66-d528ccafc751&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>

This branch was previously deployed

2 inactive deployments
artifacts — 35080366 Deployed Oct 18, 2026 by teamleaderleo via publish tree-addressed cmux-tui #22120
cmux-tui-merge-tree — 35080366 Deployed Oct 18, 2026 by teamleaderleo via publish the merge tree #2049
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.

1 participant