github / github/app

Cloud session shows stale failed/error icon when workspace diff poll returns degraded response; only clears on app restart

Open
#1,116 0 comments 0 reactions 0 assignees View on GitHub
Bugs
Dominant language
No language data
Stars
2.1k
Forks
153
PR merge metrics
No merged PRs in 30d

Description

## Short summary

A cloud (sandbox) session shows a "failed"/error status icon in the sidebar even though the session is healthy and the agent responds normally. The icon is stale: it never updates while the session stays open, and only clears after fully quitting and relaunching the app.

## Affected version or release

Observed on **v0.2.34** (session created on this build). The stale icon only cleared after restarting the app, which also updated it to **v1.0.0**. OS: Windows.

## Installation context

Personal use against a single connected repository. Cloud sandbox session (execution location = cloud), base branch `main`.

## What happened?

I created a cloud session and used it successfully — the agent responded and the chat worked the whole time. Despite that, the session's sidebar icon showed a failed/error state.

Digging into the app logs (`~/.copilot/logs/github-app..log`), the agent-side RPCs all succeeded, but the **cloud workspace diff poller** repeatedly returned a degraded/fallback response, and it only polled at session-creation time — it never re-evaluated afterward, so the status froze.

Relevant log lines for the affected workspace (`workspace_id=4f778668-...`, `session_id=59a87b13-...`):

```
17:38:24 cloud workspace diff: scheduled poll returned degraded response mode=Branch is_fallback=true truncated_paths=[]
17:38:26 cloud workspace diff: scheduled poll returned degraded response mode=Branch is_fallback=true truncated_paths=[]
17:42:23 cloud workspace diff: RPC returned snapshot elapsed_ms=1 files=0 insertions=0 deletions=0 base_branch=main
17:42:23 cloud workspace diff: scheduled poll returned degraded response mode=Branch is_fallback=true truncated_paths=[]
17:42:25 cloud workspace diff: RPC returned snapshot elapsed_ms=1 files=0 insertions=0 deletions=0 base_branch=main
17:42:25 cloud workspace diff: scheduled poll returned degraded response mode=Branch is_fallback=true truncated_paths=[]
```

Key observations:

1. The underlying `session.workspaces.diff` RPC **succeeds** (returns a snapshot, `files=0`), but the poll is still marked `is_fallback=true` / "degraded response." So a degraded/fallback diff result appears to be surfaced to the user as a hard session "failed" icon.
2. The diff poll only ran during session creation (two bursts at 17:38 and 17:42) and **never re-polled** while the session stayed open. There was no later `is_fallback=false` (healthy) poll to overwrite the state, so the icon stayed stuck.
3. Sending more messages and clicking away/back to the session did **not** clear the icon. Only a full app quit + relaunch reset it.

## Steps to reproduce

1. Create a cloud (sandbox) session.
2. Have the cloud workspace diff poll return a degraded/fallback response at creation (observed with `files=0`, base branch `main`).
3. Use the session normally — the agent responds fine.
4. Observe the sidebar shows a failed/error icon for the session.
5. Send more messages / switch sessions and back — icon does not clear.
6. Quit and relaunch the app — icon finally resets.

## Expected behavior

- A degraded/fallback result from the cloud workspace **diff** poll should not surface as a whole-session "failed" status, since the agent/session is still healthy and usable. Use a softer/neutral indicator (or none) for a degraded diff sync.
- The session status should re-evaluate periodically (or on user interaction) and recover on its own when a subsequent poll succeeds, rather than freezing until an app restart.
- A user-facing way to dismiss/refresh a stale session status icon without restarting the app would also help.

## Additional context

- Logs: `~/.copilot/logs/github-app..log` (lines from `github_app::session::cloud_workspace_diff`). Full request/session IDs available on request.
- Possibly related: #1083 (stale closed-PR red icon persists after state change), #915 (session idle but UI reports activity), #771 (rate-limited session shown as "done"). This report differs in that the trigger is specifically a cloud workspace **diff** poll returning `is_fallback=true`/degraded, and the icon only clears on app restart.

Contributor guide

Open the contributing guide

Research direction

Start at the cloud_workspace_diff log path and trace how degraded diff responses update the session status and sidebar icon. Reproduce the cloud session case, then verify that a degraded diff does not mark a healthy session as failed, that later polling can recover the status, and that recovery does not require an app restart.

Written by the indexing model from the issue text.

Assessment

Domain
api, desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.