Skip to content

Team mode: follow-ups from the #4109 remote Host review #4201

Open

Description

@DoodleBears

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:

  1. Test gap (CodeRabbit on test(core): lock Owner-only relationship and gateway-session invariants #4199): the HTTP assertion in team-mode.test.ts stops 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.
  2. 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-client used 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.
  3. H2, package boundaries: packages/client and packages/core/src/devices import from apps/mobile/src by relative path (45 files). Split into host-protocol and host-client, and add lint rules: packages/** must not import apps/**, and core must not import client/src.
  4. H3, remote credentials in localStorage (remote-hosts.ts): needs Vain's decision before anyone changes it (Host-side custody, or Electron safeStorage).
  5. M2: remote settings UI follows the peer's Team permissions (host-settings.tsx). M4: split remote-hosts.ts after 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.

Activity

  1. DoodleBears commented on Nov 14, 2026

    @DoodleBears
    ContributorAuthor

    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.

  2. DoodleBears commented on Nov 15, 2026

    @DoodleBears
    ContributorAuthor

    Agent work claim

    • Agent: Codex
    • Task: codex/local/01a1e112-8bdc-7472-b4a5-e7a2c592ecb7 (not a DSH Session)
    • Issue scope: H1 logic and desktop adapter only; H2 host-protocol/host-client extraction and boundary lint. Visual UI and H3 custody excluded.
    • Branch: codex/4201-host-client
    • State: active (implementation sub-agent; local commits only, no push or PR)
  3. added
    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDs
    on Nov 15, 2026
  4. DoodleBears commented on Nov 15, 2026

    @DoodleBears
    ContributorAuthor

    Agent work handoff

    • Task: codex/local/01a1e112-8bdc-7472-b4a5-e7a2c592ecb7 (Codex; not a DSH Session).
    • State: handed-off. H1 logic/desktop adapter and H2 implemented on 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.
    • Commits: 6ce2b98ed878b1c14685000cabb6a873869f9795 (shared packages + boundary lint), 9d12f58e64ba0fe134a93348080fd520339b26d9 (Team flow + adapter + UI contract).
    • 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.
    • Final affected suites: 15,756 passed / 74 skipped; generated-header and version-injection regressions corrected. Two unchanged copy-recovery suites require canonical TMPDIR on macOS (15/15 pass there; their default symlinked temp path caused seven refusals). No recovery guard was weakened. The known simultaneous-retirement case passed.
    • Both CI plans select full + mobile; typechecks, lint/CLI parity, format, docs build, artifact import inspection and pnpm e2e:smoke pass. 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.
  5. removed
    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDs
    on Nov 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions