让每个编程智能体的预览指向正确的工作树
本文目录
判断智能体的界面改动之前,先把任务与提供页面的服务对应起来。记录工作树、从中启动的进程、进程实际报告的地址、该地址上的页面身份,以及计划检查会使用的目标。目录正确,浏览器仍可能指向另一个服务。
本指南适用于多个开发预览可能同时运行的情况。它使用一个包含 main 与两个任务工作树的完整虚构示例。下方全部启动记录、页面描述与流程都是编写的教学材料。没有启动服务、请求页面或运行测试。3000、3001、3002 是示例端口,不是已经在你机器上预留或检查过的端口。
两段历史讨论促成了这个任务:一条关于工作树开发服务端口的 VS Code issue描述了端口变化后,浏览器与检查仍指向较早服务的情况;一项 superpowers 环境隔离请求询问工作树专属配置,并提到共享数据可能互相干扰。它们是彼此独立的情况报告,不是同一事件的多次复现。两者都不能确立当前版本支持什么,也不能证明发生过数据库损坏。
让代码任务足够小,便于识别
虚构应用按以下顺序显示两条给定笔记记录:
| ID | Title | State |
|---|---|---|
| N11 | Sketch response | active |
| N12 | Review brief | archived |
main 页面标题为 Notes,筛选标签为 All items,每条记录都有 Open 动作。任务 A 只把动作标签改为 Open preview。任务 B 将初始筛选改为 Active only,因此初始页面包含 N11、不显示 N12;动作仍为 Open。
这是从同一 main 基线出发的两项独立改动提案。记录是字面教学示例,不是数据库响应。练习没有提供后端、测试账号、数据库配置或已实现的筛选函数。
给三个源码状态使用简单标签:M0、A1、B1。对应服务进程使用 S-M、S-A、S-B。这些是为案例虚构的引用,不是 Git 提交哈希、操作系统进程 ID 或要执行的命令。
将启动映射与目录分开
全部示例服务与示例浏览器都使用同一台电脑的回环网络。远程环境或转发预览,还需要自己的主机与转发信息;示例地址不能替你识别那种环境。
| 任务 | 工作树与分支 | 源码标签 | 进程与启动目录 | 编写的启动地址 |
|---|---|---|---|---|
| main 参考 | /example/notes/main、main |
M0 | S-M,从 /example/notes/main 启动 |
http://127.0.0.1:3000 |
| A:动作措辞 | /example/notes/task-a、task/action-copy |
A1 | S-A,从 /example/notes/task-a 启动 |
http://127.0.0.1:3001 |
| B:初始筛选 | /example/notes/task-b、task/active-filter |
B1 | S-B,从 /example/notes/task-b 启动 |
http://127.0.0.1:3002 |
虚构的 S-A 启动时先请求 3000 端口。因为 S-M 已在使用它,本例的服务器选择 3001,并报告该地址。这是示例设定的行为,不是保证某个框架会自动换端口、而非停止。S-B 报告 3002。
完整启动笔记为:
编写的启动笔记 — 不是捕获的终端输出
S-M
源码标签:M0
启动目录:/example/notes/main
报告地址:http://127.0.0.1:3000
S-A
源码标签:A1
启动目录:/example/notes/task-a
请求端口:3000
虚构启动决定:3000 已占用;选择 3001
报告地址:http://127.0.0.1:3001
S-B
源码标签:B1
启动目录:/example/notes/task-b
报告地址:http://127.0.0.1:3002
真实工作中,应保留实际进程引用和能检查到的启动信息。名叫“Task A”的终端标签页是有用标签,但不等于启动目录。同样,如果地址变了却没人把它传到下一步,只说“server ready”仍然不完整。
将地址连到可识别的页面
本练习中,每个编写的页面都包含一个示例身份标记。三份完整页面描述为:
MAIN 页面 — 编写的示例
地址:http://127.0.0.1:3000/notes
页面标记:PREVIEW-M0
标题:Notes
筛选:All items
N11 | Sketch response | active | Open
N12 | Review brief | archived | Open
TASK A 页面 — 编写的示例
地址:http://127.0.0.1:3001/notes
页面标记:PREVIEW-A1
标题:Notes
筛选:All items
N11 | Sketch response | active | Open preview
N12 | Review brief | archived | Open preview
TASK B 页面 — 编写的示例
地址:http://127.0.0.1:3002/notes
页面标记:PREVIEW-B1
标题:Notes
筛选:Active only
N11 | Sketch response | active | Open
页面标记有助于区分这些示例,但不会自动证明源码修订。真实应用中,要弄清标记从哪里来,是否可能过期或被复制。将它与服务启动信息、原本要检查的任务专属内容关联起来。
预期的预览与检查映射如下:
| 进程 | 预览路径 | 本例页面身份 | 预期检查目标 |
|---|---|---|---|
| S-M | http://127.0.0.1:3000/notes |
PREVIEW-M0;All items;Open | main-check:baseURL http://127.0.0.1:3000,路径 /notes |
| S-A | http://127.0.0.1:3001/notes |
PREVIEW-A1;All items;Open preview | A-check:baseURL http://127.0.0.1:3001,路径 /notes |
| S-B | http://127.0.0.1:3002/notes |
PREVIEW-B1;Active only;Open | B-check:baseURL http://127.0.0.1:3002,路径 /notes |
baseURL 是本例给检查的实际起始地址使用的名称,并未规定某个框架的配置语法。真实执行器可能从多个位置取得目标,因此应检查实际会使用的值,而不是依赖熟悉的文件名或配置标签。
流程 1:A 已就绪,浏览器却仍显示 main
下面的流程引入一个错误目标。页面内容和启动笔记来自上方虚构材料,不是捕获的观察结果。
| 步骤 | 发生什么 | 当时的目标或信息 | 随后怎样 |
|---|---|---|---|
| W1 | main 是现有参考预览。 | S-M 在 3000 端口提供 M0。浏览器位于 http://127.0.0.1:3000/notes。 |
页面有 PREVIEW-M0、All items 和 Open。 |
| W2 | A 的源码改动在自己的工作树中准备好。 | /example/notes/task-a、A1;要求的标签是 Open preview。 |
文件工作正确,不会改变浏览器地址。 |
| W3 | 在编写的启动流程中,S-A 启动。 | 3000 端口冲突后,它报告 3001。 | 应传给后续步骤的地址是 3001。 |
| W4 | S-B 有独立预览。 | /example/notes/task-b、B1,S-B 使用 3002。 |
这不会更新 A 的浏览器或检查目标。 |
| W5 | 审阅者刷新现有浏览器页面。 | 地址仍是 http://127.0.0.1:3000/notes;标记为 PREVIEW-M0。 |
Open 仍可见,因为本例中此页属于 main。 |
| W6 | 检查名叫 A-check 的配置。 | 实际 baseURL 仍为 http://127.0.0.1:3000,路径 /notes。 |
名称和预期任务,与配置目标不一致。 |
| W7 | 审阅者将身份和内容与 A 的请求比较。 | 预期 PREVIEW-A1 / Open preview;实际呈现 PREVIEW-M0 / Open。 | 记录预览目标不匹配,不下结论说 A1 没有改动。 |
| W8 | A 的界面审阅停在不匹配处。 | 保留 A1 源码与三份启动笔记。没有执行检查。 | 用此页评估 A 之前,先解决地址与检查映射。 |
本例中,W5 刷新未改变的地址,并不能选中 S-A。这里也没有理由再改一遍 A 的标签,因为所检查的页面属于 M0。真实案例如果身份信息不完整,应在服务映射确立前保留原因未知,而不是猜测缓存、重新构建或代码编辑失败。
只检查共有标题 Notes,区分能力会很弱,因为三个示例页面都有它。指向 3000 的 Open preview 检查会查看错误的源码页面。这些是根据编写页面作出的推导,不是测试结果。实际结果栏仍为空。
错误目标解释了为什么正确的代码检出与正确任务对话,仍可能带来无关预览。即使使用专用浏览器窗口、没有其他键盘输入竞争,也可能发生。
流程 2:把 A 的服务地址一直带到审阅中
从 W8 继续,保留 A1 和相同的三份服务记录。下方修正是编写的计划与流程,没有改变真实执行器,也没有启动自动化测试套件。
| 步骤 | 示例中的读取或修正 | 形成的映射 | 仍需分开什么 |
|---|---|---|---|
| C1 | 识别 A 预期的源码与改动。 | /example/notes/task-a、A1;只将 Open 改为 Open preview。 |
main 与 B 保留各自源码状态。 |
| C2 | 找到 S-A 的启动记录,而不只看终端标题。 | 启动目录是 task-a;报告地址为 http://127.0.0.1:3001。 |
进程标签是示例引用,不是原生进程 ID 查询。 |
| C3 | 在编写的浏览器流程中选择 A 的明确预览地址。 | http://127.0.0.1:3001/notes 显示 PREVIEW-A1、All items、两条记录和 Open preview。 |
可见标记与任务内容支持本例页面映射,不代表每项后端资源。 |
| C4 | 将呈现页面与任务专属预期比较。 | 动作措辞符合 A1;N11 与 N12 仍按原顺序出现。 | 这种静态比较不能确立打开预览功能可用。 |
| C5 | 准备修正后的 A-check 目标记录。 | 实际 baseURL 从 3000 改为 3001;路径仍为 /notes;预期页面身份为 PREVIEW-A1。 |
练习没有编辑实际配置文件。 |
| C6 | 继续明确保留其他目标记录。 | main-check 仍为 3000 / PREVIEW-M0;B-check 仍为 3002 / PREVIEW-B1。 | 修正 A 不等于要求重定向所有任务。 |
| C7 | 记录计划检查及当前状态。 | 先确立 A 的页面身份,再检查动作标签与保留的记录。实际检查:NOT RUN。 | 目标正确,不会让未运行的检查变成通过。 |
| C8 | 任何会改变状态的练习前,先查看资源信息。 | 这里没有说明数据库、存储、队列和登录/会话关系。 | 映射后的预览不代表有权填充数据、重置状态或执行类似预订的流程。 |
完整的检查目标前后记录很简短:
编写的检查目标记录 — 没有调用执行器
配置:A-check
修改前:baseURL http://127.0.0.1:3000;路径 /notes
修改后:baseURL http://127.0.0.1:3001;路径 /notes
预期页面身份:PREVIEW-A1
预期标题/筛选:Notes / All items
预期记录与顺序:N11、N12
预期动作:两条记录都为 Open preview
实际运行结果:
对于自己的执行器,应将实际启动地址带进生效目标与返回的审阅记录。如果覆盖项、代理、转发规则、旧进程或过期页面身份,使这条链路无法确立,就保留不匹配。在无法解释的地址上重复检查,并不能解决它。
为每种资源分别说明边界
不同端口只区分映射表中写下的地址,不能确立进程、数据或会话怎样分离。预览仍可能使用共享后端,或关联其他工作的账号。
| 资源 | 虚构案例提供了什么 | 真实任务仍需确立什么 |
|---|---|---|
| 代码检出 | 三个命名工作树与源码标签 | 实际根目录、修订、已有改动,以及服务应用所用的共享或生成输入 |
| 服务进程与地址 | S-M/S-A/S-B 与三个编写的启动地址 | 哪个进程从哪里启动、报告哪个地址,以及它与浏览器之间的主机/容器/转发路径 |
| 页面与资源文件 | 三个编写的页面身份与内容 | 服务提供的身份怎样产生、是否仍有效,以及相关页面/资源文件是否属于预期改动 |
| 数据库与测试数据 | 未提供后端配置;实际关系 UNKNOWN | 数据库/租户/schema 与预期测试记录;不从不同端口推断数据分离 |
| 队列或后台工作 | 未提供队列配置;实际关系 UNKNOWN | 任务将使用哪个 worker 和队列,其工作会不会影响其他任务 |
| 文件、上传或对象存储 | 未提供存储配置;实际关系 UNKNOWN | 路径/bucket/前缀,以及哪些任务共享它们 |
| 浏览器登录与会话 | 未提供账号/配置档/会话设置;实际关系 UNKNOWN | 浏览器配置档、应用登录/会话行为与下游账号;另一个端口不保证会话隔离 |
| 检查执行器 | 三个预期目标与一个过期的 A 目标 | 实际 baseURL、路径、覆盖项、预期页面身份,以及计划检查会读取还是改变状态 |
在有效推进地址映射的同时,保留这些未知项。示例页面不能支撑关于从未配置过的数据库或登录的结论。真实工作中,不要假定加载预览没有下游影响;先确立相关项目行为,再将其当作无害的检查界面。
只修正已识别的目标。保留无关服务、进行中的工作与数据。如果无法确定服务负责人或资源关系,下一步仍限于检查和规划。本指南不提供终止进程、清空数据库、迁移或替换环境的命令。
复制一张空白只读预览卡
每项预期服务单独使用一张卡。根据实际可检查的信息填写观察栏,未知值保持未知。不要把凭据或完整环境文件粘贴进卡片。
任务与预期界面改动:
代码
预期工作树/分支或游离状态:
观察到的源码修订与已有改动:
服务
进程引用及其负责人:
启动目录与映射依据:
实际启动地址:
主机/容器/转发背景,如适用:
页面
正在检查的最终地址,包含路径:
预期页面身份及其来源:
呈现的页面身份与任务专属内容:
什么支持它与预期源码的关联:
是否仍不确定资源文件或页面的新旧状态:
检查
检查配置/目标定义:
实际 baseURL 与路径:
影响目标的覆盖项或转发:
行为检查之前计划进行的身份检查:
实际完成的检查与结果,如有:
资源
数据库/测试数据关系:
队列/后台工作关系:
存储关系:
浏览器/账号/会话关系:
已经进行中的操作及其已知状态:
下一项只读检查或未解决的不匹配:
这张卡刻意保持空白。已填好的 main/A/B 映射是教学示例,不是一组可以粘贴到其他项目的值。服务重启、报告地址变化,或源码/页面身份不再匹配时,应重新检查链路中的相关关联。
请智能体先确立预览目标,再判断改动
评估界面改动之前,帮助我梳理预期任务的预览映射。
这一步只读检查并给出书面映射,不启动服务、
不修改配置、不请求 HTTP、不操作浏览器,也不执行测试。
使用我提供的任务与启动记录,识别:
- 预期任务、工作树、源码修订和具体预期改动;
- 服务进程引用、启动目录和报告地址;
- 已提供的页面地址/身份信息,以及它能确立什么;
- 检查执行器实际使用的 baseURL/路径,包括可见覆盖项;
- 仍未知的数据库、队列、存储和浏览器/会话关系。
区分预期去向与记录实际显示的内容。
如果浏览器或检查目标仍指向 main,指出这项不匹配。
不要根据属于另一个服务的页面,诊断源码缺少改动。
不要把页面标签当成每项源码、资源文件或后端关系的证明。
返回任务→服务→页面→检查映射、未解决的关联,
以及最小的目标修正建议。将以后拟议的页面/检查
核验与已完成工作分开。未运行结果仍保持未运行。
这一步不启动或停止进程、不改端口或配置、不清空存储、
不填充数据、不运行迁移、不执行检查,也不修改应用。
不要假定新端口隔离了数据或会话。如果缺少某项关系,
明确说明,并指出继续所需的信息。
工作树与对话核对,回答任务应使用哪份代码与指令;共享浏览器交接,回答谁能发出下一次界面输入;这里增加的映射,回答哪个运行中的服务提供页面,以及检查会访问哪个地址。将三个问题分开。只有在与预期源码的关联已确立的范围内,才能把预览当作改动证据。