Skip to content

feat(settings): refresh daemon controls and iOS chat launch#3929

Merged
BunsDev merged 2 commits into
mainfrom
feat/settings-daemon-control-sheet
Jul 26, 2026
Merged

feat(settings): refresh daemon controls and iOS chat launch#3929
BunsDev merged 2 commits into
mainfrom
feat/settings-daemon-control-sheet

Conversation

@BunsDev

@BunsDev BunsDev commented Jul 26, 2026

Copy link
Copy Markdown
Member

Summary

Refreshes the Settings → Daemon control sheet from the approved ZIP handoff and makes iOS launch into the newest active conversation with the updated connection copy.

Why

The daemon surface needed the approved compact hierarchy without losing its live multi-host, travel, executor, or Omnigent behavior. On iOS, Chats should start at the most recently updated non-archived thread while preserving explicit deep links, handoffs, and New Chat intents.

Changes

  • extract a focused, token-only responsive Daemon settings control sheet
  • preserve status, start/restart, travel/offline, Tailscale discovery, hub probe/save/revert, executors, metadata copy, and Vault-gated Omnigent behavior
  • change iOS connecting copy from Opening the cave to Entering the Cave
  • default iOS Chats to the newest non-archived thread by updatedAt, independent of pin order
  • add source-contract and XCTest coverage for the new behavior

Verification

  • pnpm test:app — 913/913 files passed
  • pnpm test:mobile — 74/74 files passed
  • Xcode CovenCaveTests — 180/180 passed on iPhone 16 Pro, iOS 26.5
  • pnpm typecheck
  • pnpm lint — zero design drift
  • pnpm check:tests-wired — 1250 files wired
  • pnpm build — bundle and standalone budgets passed
  • focused Daemon/settings contracts and iOS design-fidelity test
  • production visual audit in dark, light, and Dusk narrow layouts; no console errors or horizontal overflow
  • git diff --check

Risk + rollout notes

The Daemon UI keeps the existing API contracts and isolates new styling under .settings-daemon. Explicit iOS navigation intents retain priority over the recency default. The approved ZIP (SHA-256 956349d6be9de372dd67ea790b54b0f37051f16e43c347ffa7753c8af89d139c) was the design source; no migration or release-note entry is required.

Signed-off-by: Val Alexander <bunsthedev@gmail.com>
Copilot AI review requested due to automatic review settings July 26, 2026 20:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Refreshes the Settings → Daemon surface by extracting it into a focused DaemonSection component with a dedicated control-sheet stylesheet, and updates iOS chat launch behavior to default to the most recently updated non-archived thread (while preserving explicit navigation intents). Also updates iOS connecting copy.

Changes:

  • Added a new daemon settings control-sheet component (settings-daemon.tsx) and stylesheet (settings-daemon.css), and wired it into SettingsShell.
  • Updated daemon/settings source-contract tests to validate the extracted sheet and preserve key behaviors (multihost, executors, Omnigent gating, reduced motion, etc.).
  • On iOS, changed connecting headline copy and added “most recent active thread” default selection with XCTest coverage.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/styles/settings-daemon.css Adds a dedicated daemon control-sheet stylesheet with container queries and reduced-motion handling.
src/components/settings-shell.tsx Wires the daemon tab to the extracted DaemonSection and passes Omnigent settings as a prop.
src/components/settings-shell-polish.test.ts Updates source-contract assertions to include the extracted daemon module.
src/components/settings-overview.test.ts Updates overview wiring expectations now that daemon UI lives in settings-daemon.tsx.
src/components/settings-daemon.tsx New extracted daemon settings UI: status, connection drafts/save/revert, tailscale device selection, executor disclosure, copy-to-clipboard, and Omnigent slot.
src/components/settings-daemon-multihost.test.ts Adds/updates source-contract coverage for the new daemon control sheet and CSS affordances.
src/components/settings-action-buttons.test.ts Ensures Save connection renders via exactly one shared Button in the new module.
src/components/daemon-start-button.test.ts Updates source search to include the extracted daemon module.
scripts/ios-claude-design-fidelity.test.mjs Extends iOS design-fidelity contract to assert “most recent thread” default selection and updated connecting copy.
apps/ios/CovenCave/CovenCave/CovenCaveTests/LaunchThreadIntentTests.swift Adds XCTest coverage for mostRecentThread behavior (updatedAt + archived filtering).
apps/ios/CovenCave/CovenCave/Views/RootView.swift Updates connecting headline copy to “Entering the Cave”.
apps/ios/CovenCave/CovenCave/Views/ChatsHomeView.swift Selects most recent active thread on appear / thread hydration without overriding explicit intents.
apps/ios/CovenCave/CovenCave/State/AppModel.swift Introduces mostRecentThread computed property (active threads by updatedAt).
Comments suppressed due to low confidence (6)

src/styles/settings-daemon.css:262

  • PR description says the sheet is “token-only”, but this uses a raw px value (width: 3px). Consider deriving it from existing spacing tokens so the sheet stays token-based.
  width: 3px;

src/styles/settings-daemon.css:269

  • PR description says the sheet is “token-only”, but this hard-codes height: 6px. Use a token-derived calc so the pulse bars follow the spacing scale.
  height: 6px;

src/styles/settings-daemon.css:274

  • PR description says the sheet is “token-only”, but this uses height: 12px instead of a token. 12px matches var(--space-3), so you can keep the value token-based without changing layout.
  height: 12px;

src/styles/settings-daemon.css:280

  • PR description says the sheet is “token-only”, but this hard-codes height: 8px. Since 8px is var(--space-2), this can be expressed as a token without changing layout.
  height: 8px;

src/styles/settings-daemon.css:335

  • PR description says the sheet is “token-only”, but this uses raw px values (gap: 3px; padding: 2px). Consider token-derived calcs so the micro-spacing stays tied to the spacing scale.
  gap: 3px;
  padding: 2px;

src/styles/settings-daemon.css:381

  • PR description says the sheet is “token-only”, but this uses a raw px offset (inset 2px …). If this needs to remain token-derived, use a token-based calc for the inset width.
  box-shadow: inset 2px 0 0 var(--color-warning);

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/components/settings-daemon.tsx
Comment thread src/styles/settings-daemon.css Outdated
Signed-off-by: Val Alexander <bunsthedev@gmail.com>
@BunsDev BunsDev self-assigned this Jul 26, 2026
@BunsDev
BunsDev merged commit 6c0d47f into main Jul 26, 2026
15 checks passed
@BunsDev
BunsDev deleted the feat/settings-daemon-control-sheet branch July 26, 2026 20:44
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.

2 participants