工作树隔离和对话上下文解决的是不同问题

使用 AI 辅助编写与复核。

本文目录

CueSpec 研究编辑组撰写 · AI 辅助团队编辑。

要求智能体编辑代码前,先检查两种对应关系:它可以修改哪个工作树,以及它的对话正在遵循哪一项任务指令。单独的目录有助于组织代码工作,却不能说明智能体记得什么,也不能说明它会将哪条指令视为当前指令。

用一张小任务卡就可以检查这两种对应关系。当两个任务足够相似,目录名称或熟悉的聊天标题可能让人产生错误信心时,这项检查尤其重要。

分清不同对象

Git 的工作树手册说明,一个仓库可以关联多个工作树。每个工作树拥有 HEAD、索引等各自的状态,同时共享仓库资源。这是代码管理行为。Git 不定义智能体宿主的对话历史、上下文选择或权限。

明确保留以下区别:

层面 需要识别的对象 需要检查的内容
任务 你想得到的结果 当前目标、允许的改动和下一步操作
代码 工作目录及检出状态 工作树根目录、分支或分离状态、修订版本和已有改动
对话 正在使用的指令和引用 当前请求、近期决定,以及实际引用的产物
宿主行为 智能体工具如何关联对话与工作区 所选工具的当前文档和可见配置

关联工作树不是安全沙箱。对话标题不能证明下一次工具操作会指向正确目录。

对应两个虚构任务

以下示例仅用于说明,不描述实际存在的工作树或聊天。

任务 预期工作树 预期分支 对话
F:文章筛选 /example/worktrees/filter feature/filter Filter behavior
E:导出格式 /example/worktrees/export feature/export Export columns
flowchart LR
    TF["任务 F · 筛选"] --> WF["工作树 filter · feature/filter"]
    TF --> CF["对话 · Filter behavior"]
    TE["任务 E · 导出格式"] --> WE["工作树 export · feature/export"]
    TE --> CE["对话 · Export columns"]

代码和对话两侧的箭头,都必须对应预期任务。一侧对应正确,不能弥补另一侧对应错误。

检查四种组合

代码目标位置 对话上下文 示例 下一步操作
正确 正确 筛选目录与当前筛选请求一致 继续处理范围内的任务
正确 错误 已打开筛选目录,但请求仍在描述导出列 编辑前重新说明当前筛选任务,并确认引用
错误 正确 筛选请求明确,但可用工作区是导出工作树 修改代码前,选择或准备正确工作区
错误 错误 正在用导出目录和旧导出指令处理筛选目标 从原始任务和产物重新建立两种对应关系

这张表描述了你可以进行的检查。它不诊断宿主缺陷,也不承诺恢复缺失的聊天历史。

检查 Git 一侧,不改变其状态

在将要执行任务的终端或执行环境中,以下检查命令用于识别工作树和修订版本:

git --version
git rev-parse --show-toplevel
git rev-parse --abbrev-ref HEAD
git rev-parse HEAD
git worktree list --porcelain

结合工作树列表阅读 rev-parse 选项。--show-toplevel 用于识别工作树根目录。检出处于分离状态时,不应将缩写形式的 HEAD 值当作分支名称;应明确记录分离状态及其修订版本。

在智能体实际会使用的环境中运行这些检查。检查另一个终端的目录,不能确定智能体的执行目录。这里的命令是检查步骤;创建、切换、重置或删除工作树属于不同操作。

复制这张双层任务卡

任务:
当前要求的结果:
允许的改动:

代码对应关系:
- 观察到的工作树根目录:
- 分支,或分离状态:
- 修订版本:
- 已有本地改动及其负责人:

对话对应关系:
- 对话标题 / 引用:
- 最新适用请求:
- 需要保留的决定:
- 当前产物引用:

一致性检查:
请求、路径和产物是否都属于这项任务?

下一步操作:

记录实际观察到的内容,不要根据聊天声称应该打开什么来填写代码字段。

一次完整的人工检查

对于虚构任务 F,假设目录检查指向 /example/worktrees/filter 和预期分支。然而,最新对话消息却写着:“重命名导出列,并保留它们的顺序。”

代码对应关系符合 F,对话对应关系却不符合。一种有用的纠正说明如下:

当前任务:文章筛选。
代码目标位置:/example/worktrees/filter,feature/filter。
保留筛选契约:空查询返回所有允许的条目,
匹配保留条目顺序。
导出列请求属于另一项独立的导出任务。
编辑前,先在这个工作树中找到筛选实现和相关检查,
再说明拟议的下一项改动。

这些路径和陈述是虚构输入,并非捕获到的命令输出。实际工作中,先检查已有改动并保留其责任归属;不要为了让工作区看起来符合任务卡而抹掉改动。

单独检查宿主特有行为

Git 问题 智能体宿主问题
检出了哪些文件和修订版本? 这个对话被允许访问哪个工作区?
这个工作树使用哪个分支? 向智能体提供了哪些指令和笔记?
通过仓库共享哪些状态? 任务之间保留、摘要或共享了哪些上下文?

依据所选宿主的当前行为和文档回答右侧问题。不要类比推断某个智能体产品的功能也存在于另一个产品中。如果任一对应关系不明确,应在修改代码前消除这份不确定性;即使没有专门的多智能体界面,这张对应关系任务卡仍然有用。