Repository navigation
Mobile: CLI sessions as real entries (ended or live) + remote-first lane base + sync-host resilience - #697
Conversation
…e default - Hub roster (host rosterBuilder + iOS local mirror) now includes standalone CLI sessions, live or ended (run-shell excluded); PTY liveness overlays running state for booted scopes - iOS Work list gate no longer hides ended standalone CLI sessions - RemoteRosterChat.isChatTool: nil/unknown toolType routes to the activation/ terminal path instead of the chat quick-look (blank-transcript vector) - Hub context menu offers only Open for CLI rows (chat.archive/delete reject non-chat sessions host-side) - lanes.create (sync layer): callers that omit baseBranch get the desktop default — remote-first base resolution (origin/<base>) honoring git.newLaneBaseSource, bounded fetch; new defaultRemoteLaneBase helper + tests - iOS LaneCreateSheet: Remote/Local base-source picker, defaults to Remote - brain ingress: answer command envelopes with a clear host_unavailable error instead of silently dropping (was: 30s timeouts + vague hydration banner) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A cross-channel singleton conflict after startup permanently killed the retry loop, stranding paired phones on the ingress fallback (connected, every request dropped) until a manual brain restart. Keep the loud first-attempt failure, but slow-retry afterwards so sync re-hosts the moment the foreign owner exits. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- host_unavailable is retryable on iOS: excluded from application-error classification, queued operations are retained during host restarts, and queueable sends queue instead of failing (Track A HIGH: the new ingress answer would otherwise permanently delete queued offline work on replay) - attention counting (host rosterBuilder + iOS needsAttention) only counts chat rows and their attached shells — a failed standalone CLI session from months ago must not pin its project atop the hub with no way to clear it - LaneCreateSheet remote-ref freshen now uses a genuinely bounded, non-queued advisory fetch (fetchGitAdvisory) instead of a task-group race that awaited the full 30s command timeout and enqueued stray git.fetch operations - defaultRemoteLaneBase moved to shared/ (its consumer is ade-cli; renderer's byte-identical remoteNewLaneBaseFallback now aliases the shared function) - dead provider-fallback collapsed in workCrossProjectChatToolType; the toast stub's toolType derivation lives on HubCreatedChat (single mapping site) - tightened resolveDefaultRemoteLaneBase source param to NewLaneBaseSource|null Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- lanes.create default-base contract pinned in syncRemoteCommandService tests (remote default, explicit-base passthrough, local opt-out, no-remote repos) - iOS ADETests: host_unavailable queue policy, needsAttention scoping, workSessionShouldAppearInWorkList visibility rules - CLI parity: ade lanes create + agent create_lane + run_ade_action lane.create now resolve the same remote-first default base (shared laneCreateRemoteBase helper) + adeRpcServer regression tests + README/help - Docs: sync-and-multi-device (roster/ingress/startup-loop/remote-commands), lanes (remote-first base), terminals-and-sessions (Work list visibility) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Warning Review limit reached
Next review available in: 43 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (25)
✨ Finishing Touches🧪 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 |
|
@copilot review but do not make fixes |
Summary
Describe the change.
What Changed
Key files and behaviors.
Validation
How you tested.
Risks
Anything to watch.
Greptile Summary
This PR updates lane creation, mobile roster behavior, and sync-host resilience. The main changes are:
host_unavailableerrors and retries after post-startup conflicts.Confidence Score: 5/5
Safe to merge with low risk.
The changes are well-scoped and include tests for the main lane-base, roster, and sync-host behaviors. No blocking correctness or security issues were identified in the changed paths.
No files require special attention.
What T-Rex did
Important Files Changed
lanes.createcommands when no base is provided.host_unavailableas retryable and adds bounded advisory fetch support.Sequence Diagram
%%{init: {'theme': 'neutral'}}%% sequenceDiagram participant Caller as iOS / CLI caller participant Host as ADE RPC / Sync host participant Resolver as Remote base resolver participant Git as Git service participant Lane as Lane service Caller->>Host: Create lane without explicit base Host->>Resolver: Resolve default base Resolver->>Lane: Read primary lane Lane-->>Resolver: primary baseRef / branchRef Resolver->>Git: Fetch primary lane remote with timeout Resolver->>Git: List branches Git-->>Resolver: branch summaries Resolver-->>Host: remote-tracking ref or null Host->>Lane: Create lane with resolved base when available Lane-->>Caller: Created lane%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% sequenceDiagram participant Caller as iOS / CLI caller participant Host as ADE RPC / Sync host participant Resolver as Remote base resolver participant Git as Git service participant Lane as Lane service Caller->>Host: Create lane without explicit base Host->>Resolver: Resolve default base Resolver->>Lane: Read primary lane Lane-->>Resolver: primary baseRef / branchRef Resolver->>Git: Fetch primary lane remote with timeout Resolver->>Git: List branches Git-->>Resolver: branch summaries Resolver-->>Host: remote-tracking ref or null Host->>Lane: Create lane with resolved base when available Lane-->>Caller: Created laneReviews (1): Last reviewed commit: "/test: contract tests, iOS regression te..." | Re-trigger Greptile