Repository navigation
Team mode M8: mobile invitation, sign-in and self-pairing - #4165
Draft
DoodleBears wants to merge 9 commits into
Draft
DoodleBears wants to merge 9 commits into
DoodleBears wants to merge 9 commits into
Conversation
Add member-scoped device grants, password gating and Peer-based HTTP/mux dispatch, with single-use self-pairing and fingerprint-pinned mobile APIs. Persist one confirmed identity per Host and isolate cached member content. Issue: #4146 Agent-Task: codex/local/01a1d77c-e36b-75a0-af02-f39c78f7232d
Issue: #4146 Agent-Task: claude/local/74a5ee4a-f6fe-4aab-870f-5e465b0b8474 Agent-Task: codex/local/01a1d77c-e36b-75a0-af02-f39c78f7232d Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…own phones Invitation entry (deep link, pair chooser and pasted link), password sign-in with the forced change on the phone, identity switch confirmation, the signed-in account on the Host connection sheet, and a one-time QR to pair another of the member's phones. Issue: #4146 Agent-Task: claude/local/74a5ee4a-f6fe-4aab-870f-5e465b0b8474 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
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. |
This was referenced Nov 14, 2026
Preserve current role permissions, lifecycle and Host relationships; append member-devices after the named migration ledger. Keep member pairing distinct from Owner-bound offers. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
Check the existing encryption pin before the M8 member fingerprint and identity-switch guards. A changed or removed pinned key retains host-key-mismatch; member fingerprint validation remains enforced. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
List member phone grants with their name and device kind, revoke them through the Team grant owner, and apply the current member-management target ceiling to invitations. Cover ledger-backed upgrades and preserve separate Owner and member pairing authority. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
The Gateway unwraps bridge results before returning them. Validate the invitation payload and its target member through that public contract. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
Keep the rollback fixture before migration-ledger so it still exercises legacy backfill after new migrations are appended. Keep the member-device upgrade fixture before member-devices. Preserve the missing-ledger refusal and rollback assertions. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
Main now resolves the implicit Owner as an active Human. Refuse the member-only pairing offer for that identity, preserving the existing Owner pairing path and M8 refusal assertion. Select the M13 upgrade fixture by its named migration instead of applying the final ledger entry. Issue: #4146 Co-Authored-By: Codex <noreply@openai.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue #4146 | Hub #4138 | ADR-0336 | Contract
Why the change
A Team mode member can now join a Host from the iOS or Android app with an invitation link and their one-time password, and pair their other phones without a password, while their phone traffic runs as that member, never as the Owner.
Special things to note
member.<token>, hashed) are dispatched by the Device Gateway through the member's DSH Peer and remote-access policy; Owner-paired devices keep their path; the Owner cookie is never used for member traffic. Invitations carry no secret; the phone pins the Host fingerprint before sending a password, and the Host refuses a mismatched fingerprint.member-devicesappended aftermigration-ledger(append-only ledger, feat(database): named schema migrations with an append-only ledger #4230).a0dd514d1): invitations now needmembers.managewithin the target-role ceiling; the implicit Owner is refused member self-pairing; phone grants are listed and revoked through the Team service; the pinned Host key refusal (host-key-mismatch) again takes precedence over the M8 fingerprint check (the CI failure). Affected suites 9,176 passed / 26 skipped / 0 failed; typecheck, lint, format, docs and smoke pass.host-clientpackage and desktop member sign-in) landing first.Change outline
Verification
pnpm lint(CLI parity), mobile typecheck and tests pass.Agent tasks:
claude/local/74a5ee4a-f6fe-4aab-870f-5e465b0b8474(contract, screens, review);codex/local/01a1d77c-e36b-75a0-af02-f39c78f7232d(Host logic, mobile modules, CLI, tests).Closes #4146
🤖 Generated with Claude Code