github / github/copilot-cli

Multi-repo collection workspace never associates a worktree when member repos have different default branches (main vs master)

未关闭
#4,709 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

area:sessions
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

Describe the bug

In a collection project (one folder containing several independent git repositories), agent-created sessions are permanently unusable if the member repos do not all share the same default branch name.

The worktrees are created successfully on disk, but the workspace→worktree association is never persisted. Every subsequent operation that needs it fails with:

workspace <workspace-id> has no associated worktree

This breaks create_session (kickoff never delivered), send_session_message, and navigate_to for that session. The session appears healthy in the sidebar and get_session returns a valid path, branch and session_type: worktree — but nothing can ever be dispatched to it.

Root cause: the app appears to assume the default branch is main when enumerating collection members. My collection contains two repos:

Member Default branch Has main?
repo-a main yes
repo-b master no

git rev-parse main is run against every member and throws on repo-b, which has no main ref at all. The logs show this repeating continuously:

WARN github_app::workspace::changes: collection member changes failed
  workspace_id=<ws> checkout=repo-b
  error=git ["rev-parse", "main"] failed: not found

Meanwhile the worktree creation itself clearly succeeded for both members:

INFO github_app::git::worktree: create worktree completed
  branch="<generated-branch>" worktree_path=...\<generated-branch>\repo-b  existing_branch=false
INFO github_app::git::worktree: create worktree completed
  branch="<generated-branch>" worktree_path=...\<generated-branch>\repo-a  existing_branch=false

…and yet dispatch to that same workspace still fails:

WARN github_app::tools::send_session_message: failed to ensure target workspace session
  workspace_id=<ws> error=workspace <ws> has no associated worktree

The failure is permanent and deterministic for the affected workspace — it survives app restarts, and survives removing all stale worktrees and pruning. I have reproduced it across 5+ separately created sessions over two app restarts.

Notably, the built-in "create issue" tool in the app also fails with this same error when invoked from a session in an affected collection, so the broken association blocks unrelated features too — I had to file this issue via gh instead.

Affected version
GitHub Copilot CLI 1.0.80
GitHub Copilot app 1.1.14 (commit 0d498e8, platform=windows, arch=x86_64)
embedded git 2.53.0-4
Steps to reproduce the behavior
  1. Create a folder containing two git repositories, where the default branch names differ:
    • repo-a — default branch main (no master ref)
    • repo-b — default branch master (no main ref)
  2. Add that folder as a project, so it is treated as a multi-repo collection.
  3. From an agent session in that project, call create_session with a kickoff prompt.
  4. create_session returns:
    Created session '<name>' (id: <ws>), but failed to start its Copilot session:
    workspace <ws> has no associated worktree
    
  5. Confirm the worktrees do exist on disk and are checked out correctly at the expected commit for both members.
  6. Confirm get_session <ws> returns a healthy record with a valid path and session_type: worktree.
  7. Retry with send_session_message (any delivery_mode) or navigate_to — both fail with the same has no associated worktree error, indefinitely.
Expected behavior

Collection member enumeration should resolve each repository's own default branch rather than assuming main — e.g. via refs/remotes/origin/HEAD, or git symbolic-ref --short HEAD, or per-member configuration.

A member repo that uses master (or any other default branch name) should not prevent the workspace→worktree association from being written, and should not render the whole session permanently undispatchable.

Additionally, failure to enumerate one member's changes should be non-fatal to the association of the workspace as a whole — the worktrees were created successfully, so the association is recoverable.

Additional context

Likely second, separate bug — a race in create_session:

create_session reports the has no associated worktree failure ~22 seconds before initialisation actually finishes:

11:55:52.282  INFO github_app::tools::create_session: create_session workspace created      workspace_id=<ws> has_kickoff=true is_cloud=false
11:56:14.887  INFO github_app::tools::create_session: create_session workspace initialized  workspace_id=<ws>

The tool returned its error at 11:55:52, but workspace initialized was not logged until 11:56:14. So create_session evaluates the association before initialize_collection_worktree_set has completed. That race is what initially made this look intermittent/environmental — worth fixing independently of the default-branch issue, since even after a correct fix to branch resolution the kickoff could still be dropped.

Impact: this blocks agent-orchestrated fan-out entirely on mixed-default-branch collections. The only workaround is to open each session manually in the UI and paste the prompt by hand, which defeats the purpose of programmatic session creation.

Environment:

  • OS: Windows 11 (10.0.26200), x86_64
  • Both member repos are Azure DevOps remotes (not GitHub-hosted), if relevant to default-branch detection
  • Repository and organisation names have been redacted; happy to supply fuller logs privately if useful

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从日志显示的 workspace 变更和 worktree 路径开始:github_app::workspace::changes、github_app::git::worktree,以及 create_session 和 send_session_message 工具。跟踪 collection 成员的分支解析和 initialize_collection_worktree_set 的顺序;当混合的 main/master collection 保留其 workspace 到 worktree 的关联,并且 create_session、消息传递和导航在没有关联缺失错误的情况下正常工作时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
git
领域
backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。