Skip to content

fix: prevent stale Copilot rules from reverting team updates - #857

Open
Yong-yuan-X wants to merge 1 commit into
Tencent:mainfrom
Yong-yuan-X:fix/copilot-rule-pre-push-sync
Open

Yong-yuan-X wants to merge 1 commit into
Tencent:mainfrom
Yong-yuan-X:fix/copilot-rule-pre-push-sync

Conversation

@Yong-yuan-X

@Yong-yuan-X Yong-yuan-X commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Copilot 用户 pull 规则 v1 后,如果队友将团队规则更新为 v2,而用户未修改本地规则就执行 teamai push --all,旧副本会被误判为 modified,产生将 v2 回退为 v1 的推送提交。

推送前同步未处理 Copilot 自动生成的 applyTo frontmatter,导致旧版本比较失败;用户作用域还未使用 Copilot 对应的配置根目录。

Changes

  • 复用现有 Copilot 正文比较和格式转换函数,识别未修改的旧副本,并以 .instructions.md 格式刷新。
  • 当团队仅修改 paths 时,若本地文件仍与历史版本的生成结果一致,也会刷新 applyTo;保留本地手动修改过的头部。
  • 保留真实的本地正文编辑;无法读取历史版本时保留本地副本。
  • 规则预同步使用与资源处理器一致的目录和安装检查,支持用户作用域的 COPILOT_HOME。
  • 补充回归测试,同步中英文使用指南、设计说明及 skill-data/core 文档。

Testing

  • npm.cmd run build:通过。
  • npx.cmd tsc --noEmit:通过。
  • npm.cmd run lint:通过。
  • npx.cmd vitest run pre-push-sync.test.ts pre-push-sync-skill-copy.test.ts copilot-adapter.test.ts -t '^(?!.*read-only skill)':54 项通过,排除 1 项原有权限测试。
  • npx.cmd vitest run --config vitest.e2e.config.ts src/__tests__/e2e/copilot-pre-push-sync.test.ts:1 项通过。

真实 CLI 回归使用构建产物和本地 Git bare 仓库,未 mock Git 操作:

  1. pull v1,另一克隆提交并推送 v2。
  2. 执行 push --all,确认本地规则更新为 v2、applyTo 正确、没有生成回退分支,远端 main 保持 v2。
  3. 队友再次更新规则,此次仅修改 paths;执行 push --all 后,确认本地 applyTo 正确刷新,且未生成回退分支。
  4. 修改本地正文后执行 push --dry-run,确认真实编辑仍被列为 modified,且内容未被覆盖。

Limitations

@jeff-r2026
jeff-r2026 self-requested a review September 27, 2026 17:37
@jeff-r2026 jeff-r2026 self-assigned this Sep 27, 2026
@github-actions

Copy link
Copy Markdown

审查发现

  • [P1 阻断] src/utils/pre-push-sync.ts:91 未像 RulesHandler.scanLocalForPush 和 pull 流程一样先调用 isAgentExcluded()。例如用户已通过 enabledAgents: ['claude'] 或 disabledAgents: ['copilot'] 排除 Copilot,但旧的 $COPILOT_HOME 仍存在时,isToolInstalledForConfig() 仍返回 true;随后执行任意 teamai push 都可能改写已明确排除的 Copilot rules,甚至覆盖其本地头部。应在安装检查前跳过被排除的工具。

测试记录

  • PR 描述包含构建、类型检查、lint、单元测试以及真实 CLI + 本地 bare Git 仓库的端到端验证,满足运行时行为变更的测试记录要求。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants