Skip to content

feat(client): unify Host settings and device-local appearance - #2564

Merged
DoodleBears merged 6 commits into
mainfrom
feat/2500-remote-host-settings
Oct 22, 2026
Merged

DoodleBears merged 6 commits into
mainfrom
feat/2500-remote-host-settings

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Why the change

Give each Host one recognizable settings dialog, with its icon/name above Appearance, Notifications, Models, Token usage and Storage, instead of a notification hint occupying the sidebar header.

Refs #2500. Requested by Vain; implemented with Codex assistance. Assignee: DoodleBears.
Agent claim · Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c.

Special things to note

  • Merge risk: two-way door, revert the PR; medium blast radius across Web preferences, the shared mobile HostLook owner and existing appearance relay. Display names remain device-local; no remote OS hostname, new Host route or second store. Review lock-scoped persistent revision/field merge, coded read failure plus explicit refresh, and absolute deadlines. Early disconnect before expiry remains unknown outcome + readback, not proven cancellation. Native synchronous-set compatibility has source-test coverage, not device acceptance.
  • Current integration: head 4d6091539a1b30ccc4464ab3c3e9ba465d9d228d, base 265cb6f5c995c689a834e6aeea763ac724844ce1. Six feature commits are patch-identical to tested d080b8cce7b31f0a932aafa4444286da6e1b3d93 (range-diff: all =). The latest rebase adds 36 upstream files from feat(mobile): swipe Chats rows and create Host sections #2552 for native Chats swipe actions, section creation and the two known shared format fixes. Only the feature index and architecture document overlap; both sides are preserved. Web Client, shared HostLook owner, appearance relay and lock/manifests remain unchanged. The earlier main integration already included Chats layout and native Blob uploads. No additional local checks or build ran after this rebase; final-head integration gates belong to CI. Vain authorized merge first, then supplementary screenshots/runtime and designated Android testing. The coordinating parent owns CI observation and merge.
  • Verification at d080b8cce7b31f0a932aafa4444286da6e1b3d93 / dd1fc54: Node 24.21.0 / pnpm 12.4.2 / GOMAXPROCS=2; frozen ignore-scripts install, 199 tests / 15 focused files, root/mobile typecheck, lint, changed-file format, complete root/Client build and diff check all exited 0. Four tracked Browser/Computer JS/maps stayed naturally unchanged. Format checked 31 matched changed files, not the whole repository. Local Client stamp remains d080b8cce, not the new PR head. Resources released 2026-10-22T08:41:40.3803035Z: 25 recorded PIDs absent, task processes/listeners empty; no Host/browser/native started. Historical evidence: original 1ab three red behaviors exit 1, repaired three green; da6 107 tests exit 0; owner/CLI runtime at 01c, final hints/screenshots at 08290. Historical evidence ledger. Its prior draft requirement is superseded by Vain's merge-first instruction; original failures remain recorded. R1 Standards 0 hard + 2 P3, Spec 3 P2; R2 static 0/0, original findings addressed. Previous-head CI job 119727469578 passed lint and failed only the two upstream format files, now corrected by feat(mobile): swipe Chats rows and create Host sections #2552; its skipped type/build are not passes. Original CI job 119654677280 failed only the evidence README format after successful install/lint; type/build were skipped. The original cancelled run, unattributed Target-closed failure, Chinese Session failure and incomplete This Host/Usage/narrow acceptance remain follow-up. No full suite, native device, model or OS notification-delivery claim. The local CI-plan preview selects full because the renamed settings file's importers cannot be traced; no full local suite ran.

Change outline

  • One Host settings surface reuses the shared HostLook owner for icon, color and local display name. This Host gets Appearance; remote Hosts retain all five sections. Offline status does not block local Appearance/Notifications.
  • host-look CLI uses the existing appearance relay with explicit Client/Host, stdin patch, expected revision, expiry and refresh. Same-origin Web Locks reread persistence before merging only the requested Host. Read failure blocks writes; unsupported locks refuse safely.
  • Existing bilingual hints appear as short body Notes. EN/ZH CLI docs, change fragment, architecture, feature map and inventory accompany the implementation.

All pairs below: 1440 × 900, English, disposable two-Host fixture. Before 8f4e650db551; After production source 08290c7192ad. Images are committed separately at 7c28520afe41. Background fixture details differ slightly; the remote Host identity is matched.

Capture gaps: the initial Usage selector hit a different heading; corrected after-only keyboard navigation showed zero tokens with Memory still loading, so no matched Usage pair is claimed. At 560 px the existing mobile shell unmounted the dialog. The supplementary Chinese tab became blank with locale subscriber crashed / unknown or released Session errors, so Chinese and supplementary This Host UI acceptance remain open. Follow-up: activate a Chinese tab in isolated profiles, reproduce remote-offline → Host settings with observe/doctor and console evidence, then cover Usage/narrow/This Host paths in a separately scheduled window. No failed capture is presented as a passed screenshot.

Appearance — Light

Before

Before: Appearance, Light

After

After: Appearance, Light

Appearance — Dark

Before

Before: Appearance, Dark

After

After: Appearance, Dark

Notifications — Light

Before

Before: Notifications, Light

After

After: Notifications, Light

Notifications — Dark

Before

Before: Notifications, Dark

After

After: Notifications, Dark

Models (preserved) — Light

Before

Before: Models (preserved), Light

After

After: Models (preserved), Light

Models (preserved) — Dark

Before

Before: Models (preserved), Dark

After

After: Models (preserved), Dark

Storage (preserved) — Light

Before

Before: Storage (preserved), Light

After

After: Storage (preserved), Light

Storage (preserved) — Dark

Before

Before: Storage (preserved), Dark

After

After: Storage (preserved), Dark

@DoodleBears DoodleBears self-assigned this Oct 22, 2026
@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 684715dc-9797-4155-80bd-15e37643e308
📥 Commits

Reviewing files that changed from the base of the PR and between 265cb6f and 4d60915.

⛔ Files ignored due to path filters: 16
  • .github/pr-screenshots/2500-hs/a-a-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-a-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-m-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-m-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-n-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-n-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-s-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/a-s-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-a-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-a-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-m-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-m-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-n-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-n-l.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-s-d.png is excluded by !**/*.png
  • .github/pr-screenshots/2500-hs/b-s-l.png is excluded by !**/*.png
📒 Files selected for processing: 34
  • .agents/skills/verify-deepseekbot/features/README.md
  • .agents/skills/verify-deepseekbot/features/remote-hosts.md
  • .github/pr-screenshots/2500-hs/README.md
  • apps/mobile/src/host/host-look.ts
  • apps/mobile/test/native-persistence.test.ts
  • changes/2500-host-settings.md
  • docs/architecture/botharness-architecture.md
  • docs/bot-cli.md
  • docs/bot-cli.zh.md
  • packages/client/src/client/appearance-control.ts
  • packages/client/src/client/host-glyph.tsx
  • packages/client/src/client/host-look-control.ts
  • packages/client/src/client/host-look-settings.tsx
  • packages/client/src/client/host-looks.ts
  • packages/client/src/client/host-settings.tsx
  • packages/client/src/client/host-tabs.tsx
  • packages/client/src/client/locale.ts
  • packages/client/src/client/remote-activity.tsx
  • packages/client/src/client/remote-conversation-view.tsx
  • packages/client/src/client/remote-host-settings.tsx
  • packages/client/src/client/remote-hosts.ts
  • packages/client/src/client/remote-notification-settings.tsx
  • packages/client/src/client/remote-notifications.ts
  • packages/client/src/client/this-host.ts
  • packages/client/test/host-look-control.test.ts
  • packages/client/test/host-look-owner.test.ts
  • packages/client/test/host-look-r1-regression.test.ts
  • packages/client/test/host-look-relay.test.ts
  • packages/client/test/host-looks.test.ts
  • packages/core/src/appearance/control.ts
  • packages/core/src/bots/cli-host-look.ts
  • packages/core/src/bots/cli-live.ts
  • packages/core/test/cli-host-look.test.ts
  • scripts/cli-ui-inventory.json
+----------------------------------------------------------------------------------------------------------------------------+
| There is nothing quite so useless as doing with great efficiency something that should not be done at all. - Peter Drucker |
+----------------------------------------------------------------------------------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • 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.

@DoodleBears

DoodleBears commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Implementation handoff: head 4d60915 / base 265cb6f. Explicit lease push from remote de4c82e succeeded; remote SHA and PR body readback match. Six feature patches are identical to d080 (range-diff all =). The latest main integration adds 36 files for #2552 native Chats swipe actions and section creation, including both known upstream format fixes. Only the feature index and architecture document overlap; both meanings are preserved. No lock/manifest changes. Earlier main integration already included Chats layout and native Blob reads. Web Client, shared HostLook owner and appearance relay are unchanged. No local checks/build ran on the rebased head; local Client stamp remains d080. Final integration belongs to new CI, watched by the parent.

Actual local checks at d080b8cce7b31f0a932aafa4444286da6e1b3d93 / dd1fc54: frozen ignore-scripts install (child/network 1), 199 tests in 15 focused files (workers 1, no file parallelism), root/mobile typecheck, lint, changed-file format, complete root/Client build and diff check all exit 0. Node 24.21.0 / pnpm 12.4.2 / GOMAXPROCS=2. Four tracked Browser/Computer JS/maps naturally unchanged; no whole-repository format/full suite claimed. A pre-test QA deadline guard incorrectly reparsed UTC, exited 1 without launching tests, and was corrected without changing the window; its diagnostic is retained.

Heavy release: 2026-10-22T08:41:40.3803035Z. All 25 recorded PIDs absent; task processes, descendants found through recorded parents and owned listeners empty; ports 47261/47262 not listening. No Host/browser/native/Metro/device resources started this window. Receipts and exact command lists remain in the local task evidence directory. No further heavy work is running or authorized here.

Vain's merge-first instruction supersedes the previous draft-only handoff. Supplementary screenshots, Chinese Session diagnosis, This Host/Usage/narrow acceptance and designated Android checks follow merge; none is silently marked passed. Original cancelled run and unattributed Target-closed failure remain retained. R1 Standards 0 hard + 2 P3, Spec 3 P2; R2 static 0/0, original findings addressed, not runtime proof. Original CI 119654677280 evidence-README format failure is preserved, with type/build skipped. The separate upstream #2554 formatting fixes remain owned by the assigned #2552 owner; this branch adds no duplicate patch to those files. Previous-head CI job 119727469578 passed lint and failed only those two upstream format files; skipped type/build remain unverified.

The five-panel Chinese HTML explainer is refreshed to this exact base/head using repository code. It is a local handoff artifact, not a publicly hosted GitHub review artifact or runtime evidence. Historical 16 screenshot URLs remain pinned to their original 7c28520 storage commit and 08290 capture source; they do not claim current-head screenshots. Parent owns final CI and merge; no independent CI polling or merge by this implementation thread.

Issue: #2500

Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
Address R1 Spec storage concurrency, failed hydration and CLI expiry findings.
Keep early disconnect outcomes unknown and require explicit readback.
Rename HostSettings and share strict HostLook membership guards.

Issue: #2500
Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
Apply repository formatting after R2 source review; no behavior change.

Issue: #2500
Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
Issue: #2500

Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
Issue: #2500

Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
Issue: #2500

Agent-Task: codex/local/01a16195-979b-7853-abdb-4acbf963c95c
@DoodleBears
DoodleBears force-pushed the feat/2500-remote-host-settings branch from de4c82e to 4d60915 Compare October 22, 2026 08:49
@DoodleBears
DoodleBears merged commit 31f313f into main Oct 22, 2026
3 of 4 checks passed
@DoodleBears
DoodleBears deleted the feat/2500-remote-host-settings branch October 28, 2026 04:26
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