Repository navigation
Open
Description
Follow-ups from the #4109 review (remote Host management × Team mode)
The review is done. #4199 merged two Host-side guard tests: members and Admins are refused every relationship action, and grants that belong to someone other than the current Owner never produce an Owner session. The open items, in priority order:
- Test gap (CodeRabbit on test(core): lock Owner-only relationship and gateway-session invariants #4199): the HTTP assertion in
team-mode.test.tsstops at the Team carrier, which refuses every/api/path first. Add a test through the DSH shared fetch handler: a Member or Admin peer calls the relationships route and gets 403 with no relationship or grant written, plus an Owner control case that reaches the handler. - H1, desktop member sign-in: desktop has no way to sign in to a remote Team mode Host with a username and password, and treats a Team invitation as an invalid pairing link. Plan: before M8 Team mode M8: mobile invitation, sign-in and self-pairing #4165 merges, move team-client, member-identity and team-invitation into a shared
packages/host-clientused by both desktop and mobile. Then add a desktop stepper (check the fingerprint → sign in → change the password on first sign-in). SavedHost records which identity it signed in as. Relationships and E6 auto-join never create member grants. - H2, package boundaries:
packages/clientandpackages/core/src/devicesimport fromapps/mobile/srcby relative path (45 files). Split intohost-protocolandhost-client, and add lint rules:packages/**must not importapps/**, and core must not importclient/src. - H3, remote credentials in localStorage (
remote-hosts.ts): needs Vain's decision before anyone changes it (Host-side custody, or Electron safeStorage). - M2: remote settings UI follows the peer's Team permissions (
host-settings.tsx). M4: splitremote-hosts.tsafter E6/E11 land. U1–U4: keep the settings entry in place, empty-state guidance, long text moved to an InfoTip, remove the duplicate connection entry.
Scheduling: 2 and 3 run alongside M8 and land before it merges. 1 is a small Codex task. 5 goes with #4198 (settings by environment) under the one-product, permission-gated principle.
Metadata
Metadata
Assignees
Labels
No labels
Activity
DoodleBears commentedon Nov 14, 2026
H3 decision (Vain, 2026-11-15): Host-side custody. Remote Host credentials move out of the browser's localStorage. The local Host holds them, keyed to the Owner, and the client only gets opaque handles. Member pages served from the same origin must never be able to read or use them, and the Host refuses any remote call that a non-Owner session makes with them. Needs a migration that moves existing localStorage entries to the Host once and then deletes them, plus the M15 security suite before merge.
DoodleBears commentedon Nov 15, 2026
Agent work claim
codex/local/01a1e112-8bdc-7472-b4a5-e7a2c592ecb7(not a DSH Session)codex/4201-host-clientDoodleBears commentedon Nov 15, 2026
Agent work handoff
codex/local/01a1e112-8bdc-7472-b4a5-e7a2c592ecb7(Codex; not a DSH Session).codex/4201-host-client, stacked on M8 Team mode M8: mobile invitation, sign-in and self-pairing #4165. Local commits only; no push or PR.6ce2b98ed878b1c14685000cabb6a873869f9795(shared packages + boundary lint),9d12f58e64ba0fe134a93348080fd520339b26d9(Team flow + adapter + UI contract).docs/architecture/team-mode-desktop-sign-in.md; invitation/manual-address entry, fingerprint pin, password gate, identity replacement, cancellation and error codes. Visual stepper remains Claude-owned. H3 and other issue items are untouched.pnpm e2e:smokepass. Smoke is Host/CLI and Human DM persistence/restart evidence, not model-reply, native or stepper UI acceptance. Owned Host processes exited and its port was released.