Describe the bug
When Copilot CLI creates a git commit, it appends a Copilot-Session: <uuid> trailer to the commit message. That trailer value is the cloud session id (mc_session_id), but copilot --resume <uuid> only accepts the local session id (id). The two are different UUIDs for the same session, so anyone who takes the id from a commit (or from a PR that shows the trailer) and runs copilot --resume <that-id> fails to resume — even when the session is present locally under its local id. There is no user-facing mapping between the two ids, so the failure looks like "the session is gone" when it is not.
Concretely, a session run in github/bosun produced a commit whose trailer read Copilot-Session: 127c5458-0152-411a-84f9-8f747e96ee55. Running copilot --resume 127c5458-0152-411a-84f9-8f747e96ee55 finds nothing: that id exists only in the cloud session store, not in the local session-store.db and with no local session-state/ folder. The actual local, resumable session is a795500d-0486-4d1c-8366-0cb5eac4e312. The link between them is only discoverable inside the local workspace.yaml:
id: a795500d-0486-4d1c-8366-0cb5eac4e312 # local id — what --resume accepts
mc_task_id: 23ce7957-5241-4990-802c-34d2a64db821 # cloud task id
mc_session_id: 127c5458-0152-411a-84f9-8f747e96ee55 # cloud id — what lands in the commit trailer
So the id the CLI writes into git history is not the id its own --resume command accepts, and nothing surfaces the correspondence to the user.
Affected version
1.0.71-2 (also reproduced against sessions created by earlier versions on the same machine)
Steps to reproduce the behavior
- Start a session that has a cloud counterpart (e.g. a session with an
mc_session_id, such as one launched from / synced with a cloud task) and let it create a git commit.
- Inspect the commit message and copy the
Copilot-Session: <uuid> trailer value.
- Run
copilot --resume <that-uuid>.
- Observe that the session cannot be resumed, even though the session still exists locally under a different id.
Expected behavior
The id recorded in the Copilot-Session commit trailer should be resumable. Either:
copilot --resume <id> should also match a session by its mc_session_id (and resolve to the corresponding local session), or
- the commit trailer should record the local
id that --resume accepts, or
- when a lookup by cloud id fails, the CLI should tell the user the corresponding local id (or resume it directly).
Additional context
Current workaround — map the trailer id back to the local, resumable id by grepping the mc_session_id field across local session state:
grep -rl "mc_session_id: <TRAILER_ID>" ~/.copilot/session-state/*/workspace.yaml
The folder name (and the id: field inside that workspace.yaml) is the id to pass to copilot --resume.
This is related to but distinct from #3671 (local changes after resuming a cloud agent session are not resumable) and #3689 (generic "can't resume session"). The core issue here is specifically that the CLI writes a non-resumable id into git commits with no surfaced mapping to the resumable local id.
Describe the bug
When Copilot CLI creates a git commit, it appends a
Copilot-Session: <uuid>trailer to the commit message. That trailer value is the cloud session id (mc_session_id), butcopilot --resume <uuid>only accepts the local session id (id). The two are different UUIDs for the same session, so anyone who takes the id from a commit (or from a PR that shows the trailer) and runscopilot --resume <that-id>fails to resume — even when the session is present locally under its local id. There is no user-facing mapping between the two ids, so the failure looks like "the session is gone" when it is not.Concretely, a session run in
github/bosunproduced a commit whose trailer readCopilot-Session: 127c5458-0152-411a-84f9-8f747e96ee55. Runningcopilot --resume 127c5458-0152-411a-84f9-8f747e96ee55finds nothing: that id exists only in the cloud session store, not in the localsession-store.dband with no localsession-state/folder. The actual local, resumable session isa795500d-0486-4d1c-8366-0cb5eac4e312. The link between them is only discoverable inside the localworkspace.yaml:So the id the CLI writes into git history is not the id its own
--resumecommand accepts, and nothing surfaces the correspondence to the user.Affected version
1.0.71-2 (also reproduced against sessions created by earlier versions on the same machine)
Steps to reproduce the behavior
mc_session_id, such as one launched from / synced with a cloud task) and let it create a git commit.Copilot-Session: <uuid>trailer value.copilot --resume <that-uuid>.Expected behavior
The id recorded in the
Copilot-Sessioncommit trailer should be resumable. Either:copilot --resume <id>should also match a session by itsmc_session_id(and resolve to the corresponding local session), oridthat--resumeaccepts, orAdditional context
Current workaround — map the trailer id back to the local, resumable id by grepping the
mc_session_idfield across local session state:The folder name (and the
id:field inside thatworkspace.yaml) is the id to pass tocopilot --resume.This is related to but distinct from #3671 (local changes after resuming a cloud agent session are not resumable) and #3689 (generic "can't resume session"). The core issue here is specifically that the CLI writes a non-resumable id into git commits with no surfaced mapping to the resumable local id.