Repository navigation
Fix Cloud reconcile for membership-less previews - #16109
Conversation
|
All contributors have signed the CLA ✍️ ✅ |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review. 📝 WalkthroughWalkthroughWhen a display or forwarded-port placement has no remote tab ID or remote views, resolution now returns a matching display membership view when available. Otherwise, it returns ChangesCloud preview membership
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to Membershipless Desktop and forwarded-port previews can reconcile locally across bound workspaces without weakening explicit placement checks. No merge-blocking issue was identified; native compilation and test execution remain for normal CI validation. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The fallback is narrowly limited to Desktop and port previews without remote placement metadata. Explicit remote placement identifiers still fail when stale, and no new access-control bypass was established. Repeated reconciliation and failure recovery remain incompletely validated. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 24 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (24 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
The membership-less preview branch only fires for displays and forwarded ports whose resource carries no view metadata. Nothing pinned either restriction: deleting the kind check turned a terminal with no views from fail-closed into a silent projection with no remote provenance, and deleting the `remoteViews == nil` check made a display that really is a daemon tab lose its tab identity. Both mutations survived the suite. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
|
Review: land. Executed A/B, not just reading: the changed function and its two helpers were extracted verbatim into a standalone Swift program and run old vs new over 15 inputs. Under the pre-fix branch, both of the new test's vectors (display and forwarded port, Executed coverage on What I checked against the three ways this kind of loosening usually goes wrong:
The inner membership lookup is not dead: Fixed: three of the four clauses in the new Left, worth a follow-up rather than a commit here:
Minor: line 75's Merging on green. — Raindrop g2 🫧 |
|
Merge receipt for
Labeled |
579a979 Align Cloud machine stale status punctuation (manaflow-ai#16228) c7d37b6 Merge pull request manaflow-ai#15806 from manaflow-ai/feat-team-settings-minimal a62dacc docs: tell contributors to start after claiming and not wait on app-host tests (manaflow-ai#15941) 7befdc7 Fix Cloud notification pane attribution (manaflow-ai#15972) 071e912 fix(ios): prevent computer picker status clipping (manaflow-ai#15799) 20cd45f Merge remote-tracking branch 'origin/main' into feat-team-settings-minimal 1ad9de2 Fix Cloud reconcile for membership-less previews (manaflow-ai#16109) a4c7eda Make new windows honor configured sidebar width (manaflow-ai#11539) d1c9a6f Merge pull request manaflow-ai#16219 from manaflow-ai/feat-team-invites-app ad16812 Fix Cloud sidebar parity after individual notification reads (manaflow-ai#15933) 285dbf7 Add live physical iOS IRX log viewer (manaflow-ai#12008) cce8214 Fix blank terminal surface after completion notification (manaflow-ai#11954) a4e862d Keep Codex auto-naming credentials out of argv (manaflow-ai#16201) f14e824 Merge remote-tracking branch 'origin/main' into feat-team-invites-app 4b832ea fix: honor OpenCode XDG and database path overrides (manaflow-ai#16229) 633852a Merge remote-tracking branch 'origin/main' into feat-team-invites-app ff131f9 Merge remote-tracking branch 'origin/main' into feat-team-invites-app 0bf5223 Merge remote-tracking branch 'origin/main' into feat-team-invites-app f221acb Merge remote-tracking branch 'origin/main' into feat-team-invites-app 7037871 Merge remote-tracking branch 'origin/main' into feat-team-invites-app 97395db Merge origin/main into feat-team-invites-app 4443dc1 cloud: header keeps only the team row and Invite after main's layout change 8e8839c Merge origin/main into feat-team-invites-app 77c068a ci: re-trigger pull request checks ac5842e cloud: received-invitation reads wait for the teams client bootstrap 04ce3d1 vendor/bonsplit: follow main's pointer 6d33293 Merge origin/main into feat-team-invites-app aea3cf4 Merge origin/feat-dashboard-tanstack into feat-team-invites-app 0c0f4dc web: invite email strips control characters from names and carries no token-derived header e775fee settings: the Invitations card loads from a zero-size anchor e1d3272 Merge origin/feat-dashboard-tanstack into feat-team-invites-app 282354c socket: register the received-invitation methods with the capability list and execution policy 9b95924 web tests: team detail seeds an email invitation row 7b2979e cloud: received invitations in Settings, the team menu, notifications, the socket and the CLI 548d240 web: cmux sends team invitation emails through Resend and serves received invitations 3f12b3e settings: Members card strings resolve from the package bundle ed80608 Merge branch 'feat-team-invites-app' into feat-team-settings-minimal 76c7093 cloud: the seats-open line uses the localized formatter 722fabb Merge branch 'feat-team-invites-app' into feat-team-settings-minimal c2b5afd cloud: nonisolated socket method table; plural seats line uses the localized formatter 5a7939c settings: format plural team strings with the localized formatter 3e3e486 Merge branch 'feat-team-invites-app' into feat-team-settings-minimal 532e318 tests: header height helper drops the removed refresh and agent menu arguments a373523 settings: plain Members card with per-row progress 550a580 web tests: carry every real stack export in dashboard mocks; drop the no-op mock restore 8d8af37 web: carry memberLimit and seat_limit into the oRPC team contract; teams-routes restores its module mocks 94f4aba Merge remote-tracking branch 'origin/feat-dashboard-tanstack' into feat-team-invites-app 688eb31 cloud: team chip uses the tab bar grey 7549cd4 cloud: Invite label uses the tab bar grey and ends under the close glyph c2d1d39 cloud: no seat-check loading line, quiet Invite button, header aligned with the tree 1020ab9 Merge origin/feat-dashboard-tanstack into feat-team-invites-app 7d9bbc2 cloud: header keeps only Invite; empty section offers New Machine 5c2fd03 cloud: Invite is a popover on the header button; Revoke is a real button 8b35736 cloud: invite sheet fits its content; link button never wraps 2df3a09 cloud: invite sheet is a plain form 0e25775 cloud: redesign the invite sheet 4660c0a cloud: invite sheet height fits its content ea905ca cloud: invite sheet is a fixed-size hosting view, not a preferred-size controller 5bffd69 cloud: invite sheet uses a single-line email field so the sheet can open d3b6e85 cloud: a dedicated invite sheet explains what a member gets 5f657ae tests: seat queue SQL contract behind CMUX_DB_TEST 06f4a7c teams: seats follow membership in the docs and UI copy 3a1790a billing: Team seat quantity follows the member count 7579097 cloud header: Invite and New Machine buttons, refresh and agent launchers in an overflow menu 93c06da l10n: keep main's text for untouched keys 1ef0878 settings: team members and invites live in Settings › Account 5f7699e cli: team roster verbs wait 60s for the network round trip d4aef24 web: log the Stack error class behind a failed team request fee9821 web: log why a team invitation send failed 6c53598 auth: team member error mapping is nonisolated for the socket path 149993d test: synthetic team origin requests use a test host 3428fa8 test: team detail billing summary includes memberLimit 6b58941 app: the team members window owns the standard close shortcut 808c9f9 l10n: keep main's catalog order; append the team members keys 0c4553a Merge origin/main into feat-team-invites-app 13f72e9 xcodeproj: add CloudTeamMembersWindow and HostAccountFlow+TeamMembers to the app target adda7a2 test: new auth.team socket methods run on the socket worker e78d62d socket: hoist async roster reads out of argument lists c763126 swift: hoist path encoding out of interpolation; focus invite field only on request 0c344bf l10n: team members and invites strings in all nine locales 6eaa946 wip: swift team invites and members (pre-localization) 1c45713 web: cap Pro and Max personal teams at 3 members
A second local workspace bound to the same Cloud workspace could fail every projection reconcile when that workspace contained a Desktop or forwarded-port preview without a daemon membership row. The failed placement lookup aborted the pass before obsolete panes were closed or the native layout was applied.
Membership-less previews now resolve as local placements when they have no explicit daemon tab or Cloud membership token. Explicit terminal tabs and display membership tokens keep their strict stale-placement errors. A parameterized regression covers both Desktop and forwarded-port previews across two local bindings to the same Cloud workspace.
Changelog
Fixed: Cloud workspace reconciliation now completes when a second local workspace shows a preview without remote membership metadata.
Validation
python3 scripts/verify-local.py --swift-changed upstream/main --timeout 600(syntax, app-source wiring, test wiring, feature flags passed)git diff --checkCloudWorkspaceLiveProjectionTests/membershiplessPreviewDoesNotBlockSecondWorkspace(isPort:)Native app/test compilation was not run on the M5 Air; CI can compile and execute the focused suite.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
Fixes Cloud workspace reconciliation so a second local workspace bound to the same Cloud workspace no longer fails every projection pass when it contains a Desktop or forwarded-port preview without a daemon membership row. Previously, that failed placement lookup aborted the pass before obsolete panes were closed or the native layout was applied.
Written for commit fd5006b. Summary will update on new commits.
Summary by CodeRabbit