返回列表

博客

用手机跟进 Bug 修复:从提问到验收

图片能显示,点开原图却报错。以这次实际修复为例,说明如何从手机提出具体需求、核对代码与测试,并完成结果验证。

发布于 标签: iphone / claude-code / codex / bug-fix / testing / case-study
博客

继续查看该栏目下的产品与工程更新。

浏览此分类

文章里的截图可以正常显示,点击原图却出现错误。这是 Tactic Remote 官网近期修复的一个问题:图片文件本身完好,但链接被错误地拼接了页面的语言前缀。

将这类任务交由 Agent 处理时,需要明确验收标准。本次修复需要确认三件事:原图可以正常打开,常规文档链接仍能跳转到对应语言,相关测试全部通过。 下文按这三项要求,说明如何提出问题、核对代码改动并完成验收。

案例来自官网的实际修复记录,代码修改与测试均在电脑端完成。文中的手机请求为根据该记录整理的操作示例,并非当时在手机端发送的历史对话。使用 Tactic Remote 时,手机用于发送指令和查看反馈,代码始终在连接的开发电脑上运行。

1. 明确描述问题

只说“修复图片问题”不够具体,Agent 可能会尝试替换资源、调整正文,甚至重构语言路由规则。提问时需要说明具体出错位置、预期表现以及需要保留的内容:

中文 iPhone 指南里的截图能显示,但点击原图后,地址不对。请先复现问题。共享图片应使用原来的/images/地址,文章和文档链接仍要跟随当前语言。修改前先说明需要改哪里、怎么检查。不要改文章正文,也不要动已有的其他改动。

发送指令前,先选择对应的网站项目,确认对话所在的本地目录和 Git 分支。如果 Agent 载入了其他仓库,应先调整目录。若尚未连接开发电脑,可先参考iPhone 设置指南。

此处的关键在于区分“显示图片”与“打开原图”。前者读取的是图片的src属性,后者依赖链接的href属性。页面能显示图片,仅说明显示图片这一步正常。

2. 先复现问题,再进行修改

可以要求 Agent 提供复现依据:

给我看一个失败样例:原地址是什么,经过处理后变成了什么,正确结果应该是什么。再加一条普通文档链接作为对照,不要为了让测试通过而改掉预期结果。

本次排查的图片路径如下:

/images/editorial/mobile-guides/iphone-chat-mode.png

原有函数将该图片路径识别为网页路径,产生了以下错误处理:

当前语言处理后的错误地址
英文末尾多出了一个 /
简体中文开头拼接了 /zh-CN/ ,末尾多出了 /

共享图片在各语言页面中保持共用,其路径不应被修改。进一步排查还发现,带有查询参数或#片段的图片链接,经处理后这些参数均会丢失。

在本地开发环境中请求原始图片地址,服务返回 200、image/png;请求拼接语言前缀的/zh-CN/images/...png时,服务返回 404。这一步仅用于确认本地环境存在链接拼接逻辑错误,不代表对线上故障范围或受影响用户数量的统计。

3. 核对代码修改

要求 Agent 列出修改涉及的文件与代码差异(diff),并通过 App 提供的文件或变更视图进行检查。先核实目录、分支与文件名是否无误,再确认修改范围是否局限在当前问题内。如果 Agent 提出重写整体路由逻辑,应要求其说明具体原因。

本次实际修复范围较小:原函数已对示例下载路径保留了原始地址,只需将共享图片路径加入相同的判断规则即可。

- if (href.startsWith('/examples/')) return href
+ if (href.startsWith('/examples/') || href.startsWith('/images/')) return href

修改后,/images/与/examples/目录下的文件将直接保留原始地址,常规页面链接则继续按既有规则处理语言切换。这是基于当前项目目录结构的处理方案,并未扩大为“凡是包含点号的链接均不转换语言”。

上述内容仅包含链接修复部分。当时的完整提交还包含文章更新与日期修正,检查变更时仍需阅读完整的 diff 内容,并分清哪些是本次修复引入的改动,哪些是工作区原本存在的变更。

4. 核对测试范围与结果

仅确认“测试通过”并不充分,还需要核实测试具体覆盖了哪些行为,以及测试所针对的代码版本。可以提出如下要求:

列出实际运行的命令、目录、分支或提交,以及退出状态和失败项。哪些已经检查,哪些只是建议,也请分开写。如果测试后又改了代码,请重新运行受影响的检查。

本次测试在 8 种语言环境下,分别验证了 6 类链接行为:

检查项预期表现
共享图片地址保留原始地址
图片参数与片段查询参数与 # 片段保持完整
共享示例地址下载示例保留原始地址
外部链接不转换为站内地址
页内锚点保持跳转到对应章节
文档页面地址随当前语言环境正确转换

测试共包含 48 项检查,针对修复前后的函数逻辑运行,结果如下:

函数版本通过项失败项
修复前3216
修复后480

旧版逻辑在每种语言下均有 2 项图片检查未通过,8 种语言共计 16 项失败。这是失败的测试项数,不是受影响的文章、用户或独立故障数。保留文档链接作为对照项是必要的:如果简单地取消所有链接的语言转换,图片链接虽然恢复,但常规文档的语言跳转将会失效。

如需自行验证该逻辑,可下载脚本,阅读源码后在开发电脑上执行:

node image-link-regression.mjs

该脚本使用 Node.js 内置断言模块,仅在内存中运行,不发起网络请求,也不修改文件。脚本保留了修复前后的链接处理逻辑,移除了 TypeScript 类型声明以支持直接运行,其测试结果与仓库中的检查一致。该脚本仅用于复现当前问题,不能替代项目本身的构建与集成测试。

在官网的实际修复中,该提交还通过了 lint、生产构建与 SEO 检查。完成自动化验证后,仍需在页面上确认实际交互表现。

5. 在页面中验证操作

在浏览器中打开最初出现问题的文章,依次检查以下环节:

  • 正文中的图片能够正常加载并显示。
  • 点击图片后能直接打开原图而非 404 错误页,且支持返回原页面。
  • 常规文档链接仍可正确跳转至对应语言页面。

建议在英文版与一种翻译语言版本中分别验证,并在移动端视口宽度下查看页面排版。

回归检查实际使用的原生 iPhone 示例截图:Tactic Remote 新对话界面中的 Chat 与 Native Terminal 选项。

这就是检查时使用的原图,点击即可打开。图中是 App 的新对话示例;本次修复发生在网站的图片链接上。

若要在 iPhone 真机上访问开发电脑中的网页预览,需通过项目既有的跨设备访问方式连接。在手机浏览器中访问127.0.0.1仅会请求手机本地,无法连接到电脑上的开发服务器。在桌面端模拟手机宽度有助于检查响应式布局,但不能替代真机环境下的实际操作验证。

6. 完成验证后设定下一步

本次修复的代码已在本地环境通过测试,并在本地预览中完成人工核验。相关验收仅针对本地版本,本次修改尚未发布上线。

在日常协作中,应向 Agent 明确当前任务的节点:

我已经在本地预览检查过原图和文档链接。保留这份修改和回归检查,说明还有哪些没验证,然后先停在这里,暂不发布或继续改动。

如果尚未亲自查看预览,应如实确认状态:“代码检查已通过,页面表现仍待人工核验。”Agent 处于空闲状态、自动化测试通过,以及人工验证符合预期,属于三个不同的阶段。

如果在操作过程中未收到响应,可先参考连接与送达状态排查指南确认连接与消息状态,再决定是否重新发送请求。

立即体验 Tactic Remote

用手机远程控制编程 Agent

连接 Mac、Windows 或 Linux 电脑上的 Claude Code、Codex 等 Agent,在 iPhone 或 iPad 上查看进展并发送下一条要求。